3

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

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

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

……好像有点臭。我的意思是,CreateRibbonExtensibilityObject()无论如何我都必须覆盖;除此之外,我所做的只是维护对功能区的本地引用,以便我可以针对它调用方法。但是感觉不太对。是否有另一种更好的方法可以在 ThisWorkbook 类中获取该参考?或者这是可以接受的吗?

谢谢!

4

2 回答 2

2

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

public static Ribbon ribbonref;

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

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

(凭记忆写的,所以可能不完全正确)

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

于 2011-01-29T03:22:45.813 回答
0

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

Globals.Ribbons.MyRibbon.MyObject.Text = "test";
于 2017-05-26T20:35:06.760 回答