我尝试了3种不同的代码示例,但都失败了。
以下是MSFT员工(How to show a context menu on a range)的代码,其他两个样本的代码完全相同:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
CommandBar cellbar = this.Application.CommandBars["Cell"];
CommandBarButton button = (CommandBarButton) cellbar.FindControl(MsoControlType.msoControlButton, 0, "MYRIGHTCLICKMENU", Missing.Value, Missing.Value);
if (button == null)
{
// add the button
button = (CommandBarButton) cellbar.Controls.Add(MsoControlType.msoControlButton, Missing.Value, Missing.Value, cellbar.Controls.Count, true);
button.Caption = "Refresh";
button.BeginGroup = true;
button.Tag = "MYRIGHTCLICKMENU";
button.Click += new _CommandBarButtonEvents_ClickEventHandler(MyButton_Click);
}
}
private void MyButton_Click(CommandBarButton cmdBarbutton, ref bool cancel)
{
System.Windows.Forms.MessageBox.Show("MyButton was Clicked", "MyCOMAddin");
}
当我右键单击一个单元格时,我希望看到一个名为Refresh的菜单项。然而,运行上面的代码(在Excel 2010中)没有“刷新”菜单项。
我可能会遗漏哪些内容,或者此功能是否从2007年更改为2010年?
答案 0 :(得分:3)
检查这种类型的代码是否存在(在您自己的插件或您公司使用的任何其他插件中),以及是否将其注释掉或将其移至插件的_Shutdown事件。
//reset commandbars
Application.CommandBars["Cell"].Reset();
答案 1 :(得分:0)
这个问题为时已晚,但可能会帮助其他人......下面的代码对我来说很好。
private void OnSheetRightClick(object Sh, Excel.Range Target, ref bool Cancel)
{
// code to create the menu item button
}
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
this.Application.SheetBeforeRightClick += OnSheetRightClick;
}