检索对色带对象的引用的“正确”方法是什么?
-
25-09-2019 - |
题
对于VSTO工作簿项目,是否有最佳做法可以从ThisWorkbook类中检索对功能区对象的参考?
这是我在做的事情:在我的功能区,我创建了一种公共方法,称为 InvalidateControl(string controlID)
. 。我需要根据某个Workbook级别的事件何时从ThisWorkbook类中调用该方法。但是,我看到对该功能区对象的“获取”引用的唯一方法就是这样做...
// This is all in the ThisWorkbook class
Ribbon ribbon;
protected override IRibbonExtensibility CreateRibbonExtensibilityObject()
{
this.ribbon = new Ribbon();
return this.ribbon;
}
...似乎有点臭。我的意思是,我必须覆盖 CreateRibbonExtensibilityObject()
不管;我要做的只是维持对色带的本地引用,因此我可以对其进行调用。但这并不正确。是否还有另一种更好的方法可以在ThisWorkBook课中获得该参考?还是可以接受?
谢谢!
解决方案
一种简单得多的方法是在某处创建一个全局静态变量(例如,在本工作书中)。
public static Ribbon ribbonref;
然后在功能区类的代码中,在事件处理程序的初始化事件中(我认为该方法被称为 Ribbon1_StartUp()
但是我不确定),设置变量:
private void Ribbon1_StartUp(object sender, EventArg e)
{
ThisWorkbook.ribbonref = this;
}
(从内存写成,因此可能不完全正确)
然后您可以使用 ribbonref
访问您的功能区实例。
其他提示
请看一下 MSDN 页面显示了全球对象的使用:
Globals.Ribbons.MyRibbon.MyObject.Text = "test";
不隶属于 StackOverflow