| 

.NET C# Java Javascript Exception

2
Wie kann ich bei einer Excel VSTO "Document-Level" ein eigenes Kontext-Menu implementieren (bei Klick auf eine Zelle mit der rechten Maustaste)?
Würden sich hier evtl. auch Smart-Tags anbieten (ich habe allerdings gelesen, man soll diese nicht mehr verwenden)
12.08.2013
mober 323 1 8
Auf die Beantwortung dieser Frage war ein Kopfgeld in Höhe von 50 Reputationspunkten ausgesetzt. Das Kopfgeld wurde bereits vergeben.
1 Antwort
1
Hallo,
also ich habe mit Visual Studio ein Workbook Projekt erstellt. Und dann mit dem folgenden Code einen neuen Kontextmenüeintrag erzeugt:

public partial class ThisWorkbook
{
private void ThisWorkbook_Startup(object sender, System.EventArgs e)
{
GetCellContextMenu().Reset();
this.Application.SheetBeforeRightClick += new Excel.AppEvents_SheetBeforeRightClickEventHandler(Application_SheetBeforeRightClick);

}

private Office.CommandBar GetCellContextMenu()
{
return this.Application.CommandBars["Cell"];
}

private void Application_SheetBeforeRightClick(object Sh, Range Target, ref bool Cancel)
{
this.Application.CommandBars["Cell"].Reset();

// Es darf nur eine Zelle markiert sein
if (Target.Cells.Count == 1)
{
Office.MsoControlType myItem = Office.MsoControlType.msoControlButton;
Office.CommandBarButton myMenuEntry = (Office.CommandBarButton)GetCellContextMenu().Controls.Add(myItem, missing, missing, 1, true);

myMenuEntry.Style = Office.MsoButtonStyle.msoButtonCaption;
myMenuEntry.Caption = "Neuer Eintrag";
myMenuEntry.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(myEntryItemClicked);
}
}

void myEntryItemClicked(Microsoft.Office.Core.CommandBarButton Ctrl, ref bool CancelDefault)
{
System.Windows.Forms.MessageBox.Show("Neuer Eintrag wurde angeklickt");
}

private void ThisWorkbook_Shutdown(object sender, System.EventArgs e)
{

}

#region Vom VSTO-Designer generierter Code

/// <summary>
/// Erforderliche Methode für Designerunterstützung -
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisWorkbook_Startup);
this.Shutdown += new System.EventHandler(ThisWorkbook_Shutdown);
}

#endregion

}


Wichtig: Die Einträge werden bei jedem Rechtsklick auf eine Zelle neu erstellt.

Gruß
16.10.2013
Gott 176 1

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH