Con un documento di personalizzazione VSTO (vale a dire, una cartella di lavoro con il codice di Net allegato), è possibile aggiungere e rimuovere i controlli a runtime per i fogli di lavoro del progetto. Il codice seguente illustra l'idea:
public partial class Sheet1
{
private void Sheet1_Startup(object sender, System.EventArgs e)
{
var button = this.Controls.AddButton(10, 10, 50, 50, "My Button");
button.Text = "My Button";
button.Click += new EventHandler(button_Click);
}
void button_Click(object sender, EventArgs e)
{
MessageBox.Show("I was clicked!");
}
Si potrebbe anche aggiungere controlli in modo dinamico ai documenti tramite un VSTO aggiuntivo, utilizzando il codice in questo senso (grazie alle persone sulla VSTO forum per quello):
var workSheet = (Excel.Worksheet) sheet;
var vstoSheet = workSheet.GetVstoObject();
var button = vstoSheet.Controls.AddButton(50, 50, 100, 50, "Test");
button.Text = "Dynamic Button!";
Controllare this post by Eric Carter per maggiori informazioni.
Un pulsante non può essere incorporato in una cella - pulsanti "galleggiare". Il meglio che puoi fare è allinearlo con una cella in fase di progettazione. – Jay
Stai provando ad aggiungere un pulsante in modo dinamico? Come sarebbe innescato? E il C# dovrebbe essere in qualche componente aggiuntivo? Sembra un'impostazione complessa e non sono chiaro sul perché vorresti farlo; perché non avere semplicemente un componente aggiuntivo VSTO e un menu o un nastro che rende la funzione disponibile da qualsiasi foglio di lavoro? – Mathias
@Jay: Posso conviverci. Qualche consiglio su come far galleggiare un pulsante sopra il mio foglio di lavoro? @Mathias: Sì, vorrei aggiungere i pulsanti in modo dinamico e i callback C# saranno in un componente aggiuntivo. Lo scopo del mio componente aggiuntivo è quello di aiutare l'utente a creare "moduli" in un foglio di calcolo, e vorrei alcuni dei moduli per incorporare i pulsanti. – mcoolbeth