Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在注册ActiveX控件的OnClick事件_C#_Excel_Vsto_Activex_Eventhandler - Fatal编程技术网

C# 正在注册ActiveX控件的OnClick事件

C# 正在注册ActiveX控件的OnClick事件,c#,excel,vsto,activex,eventhandler,C#,Excel,Vsto,Activex,Eventhandler,不幸的是,我无法想出如何执行以下操作: 我正在VSTO/.NET/C#中开发一个Excel加载项 我已经能够找到如何在工作表中获取对ActiveX控件的引用。可以通过worksheet.OLEObjects集合执行此操作 如果我知道某个按钮的名称,我可以在该集合中搜索该按钮。到目前为止,一切顺利 但是现在:如何注册在单击按钮时调用的事件处理程序?现在找到了一个解决方案,在那里: 这可能与您无关,但可能对其他人有用。我发现LateGet很古怪,我用它来代替: foreach (Worksheet

不幸的是,我无法想出如何执行以下操作:

我正在VSTO/.NET/C#中开发一个Excel加载项

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

如果我知道某个按钮的名称,我可以在该集合中搜索该按钮。到目前为止,一切顺利


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

现在找到了一个解决方案,在那里:


这可能与您无关,但可能对其他人有用。我发现LateGet很古怪,我用它来代替:

foreach (Worksheet sheet in excelApp.Worksheets)
{
    foreach (Shape obj in sheet.Shapes)
    {
        CommandButton xx = sheet.OLEObjects(obj.Name).Object;
        xx.Click += xxClicked;
    }
}

但不知道哪个按钮被点击了。您知道获取发件人的解决方法吗?您可以为每个按钮注册不同的处理程序。也许可以注册lambda(没有尝试):
void click(int buttonNumber){…}。。。cb.Click+=(系统操作)(()=>{Click(1);});cb2.Click+=(System.Action)(()=>{Click(2);})等等。我的工作很好,谢谢
label.Click+=(Microsoft.Vbe.Interop.Forms.LabelControlEvents\u ClickEventHandler)(()=>{string name=labelObj.name;label\u Click(name);})
foreach (Worksheet sheet in excelApp.Worksheets)
{
    foreach (Shape obj in sheet.Shapes)
    {
        CommandButton xx = sheet.OLEObjects(obj.Name).Object;
        xx.Click += xxClicked;
    }
}