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