1

不幸的是,我无法弄清楚如何执行以下操作:

我正在 VSTO / .NET / C# 中开发一个 Excel 插件。

我已经能够找出如何在工作表中获取对 ActiveX 控件的引用。可以通过 worksheet.OLEObjects 集合。

如果我知道按钮的名称,我可以在该集合中搜索特定按钮。到目前为止,一切都很好。

但是现在:如何注册一个在单击按钮时调用的事件处理程序?

4

2 回答 2

0

现在找到了一个解决方案,那里:http: //blogs.msdn.com/b/vsod/archive/2009/10/02/excel-how-to-run-c-code-behind-with-a-click-of -a-button-on-a-worksheet-without-vba-code.aspx

using Microsoft.VisualBasic.CompilerServices;
using MSForms = Microsoft.Vbe.Interop.Forms;

// ...

// set name of button
var cmdButton = (Excel.Shape) ws.Shapes.Item (1);
cmdButton.Name = "btnClick";

// ...

// get button by name
var cb = (MSForms.CommandButton) NewLateBinding.LateGet (
   ws, // Worksheet object
   null, "btnClick", new object [0], null, null, null
);

// register event handler
cb.Click += click;

// ...

// event handler
void click () {
   // ...
}
于 2014-06-03T08:44:02.603 回答
0

这不太可能仍然与您相关,但可能对其他人有用。我发现 LateGet 很古怪,我用这个代替:

foreach (Worksheet sheet in excelApp.Worksheets)
{
    foreach (Shape obj in sheet.Shapes)
    {
        CommandButton xx = sheet.OLEObjects(obj.Name).Object;
        xx.Click += xxClicked;
    }
}
于 2016-03-12T19:06:51.460 回答