检索对象对象的引用的“正确”方法是什么?

时间:2011-01-06 01:17:56

标签: c# vsto excel-2010 excel

对于VSTO工作簿项目,是否有从ThisWorkbook类检索Ribbon对象的引用的最佳实践?

以下是我正在做的事情:在我的Ribbon类中,我创建了一个名为InvalidateControl(string controlID)的公共方法。我需要根据某个工作簿级别事件触发时从ThisWorkbook类调用该方法。但是我能看到“获得”对Ribbon对象的引用的唯一方法就是这样做......

    // This is all in the ThisWorkbook class
    Ribbon ribbon;
    protected override IRibbonExtensibility CreateRibbonExtensibilityObject()
    {
        this.ribbon = new Ribbon();
        return this.ribbon;
    }

......看起来有点臭。我的意思是,我不得不覆盖CreateRibbonExtensibilityObject();我正在做的就是保持对功能区的本地引用,以便我可以调用方法来对抗它。但感觉不对。是否有另一种更好的方法可以在ThisWorkbook课程中获得该引用?或者这是否可以接受?

谢谢!

2 个答案:

答案 0 :(得分:2)

更简单的方法是在某处创建一个全局静态变量(例如在ThisWorkbook中)。

public static Ribbon ribbonref;

然后在Ribbon类的代码中,在初始化事件的事件处理程序中(我认为该方法被称为Ribbon1_StartUp(),但我不确定),设置变量:

private void Ribbon1_StartUp(object sender, EventArg e)
{
    ThisWorkbook.ribbonref = this;
}

(从记忆中写出所以可能不完全正确)

然后,您可以使用ribbonref访问功能区实例。

答案 1 :(得分:0)

请参阅此MSDN页面,其中显示了Globals对象的使用:

Globals.Ribbons.MyRibbon.MyObject.Text = "test";