Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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# 什么';这是“什么?”;“适当的”;检索对功能区对象的引用的方法?_C#_Vsto_Excel 2010_Excel - Fatal编程技术网

C# 什么';这是“什么?”;“适当的”;检索对功能区对象的引用的方法?

C# 什么';这是“什么?”;“适当的”;检索对功能区对象的引用的方法?,c#,vsto,excel-2010,excel,C#,Vsto,Excel 2010,Excel,对于VSTO工作簿项目,是否有从ThisWorkbook类检索对Ribbon对象的引用的最佳实践 下面是我要做的:在Ribbon类中,我创建了一个名为InvalidateControl(string controlID)的公共方法。我需要根据某个工作簿级别事件触发的时间从ThisWorkbook类调用该方法。但我能看到的唯一“获取”该Ribbon对象引用的方法是这样做 // This is all in the ThisWorkbook class Ribbon ribbon;

对于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;
    }
…好像有点臭。我的意思是,不管怎样,我都必须重写
createRibboneExtensibilityObject();除此之外,我所做的就是维护对ribbon的本地引用,以便可以针对它调用方法。但这感觉不对。在ThisWorkbook类中是否有其他更好的方法获取该引用?或者这是可以接受的


谢谢

一种更简单的方法是在某个地方创建一个全局静态变量(例如,在此工作簿中)

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

private void Ribbon1_StartUp(object sender, EventArg e)
{
    ThisWorkbook.ribbonref = this;
}
(从内存中写入,因此可能不完全正确)

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

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

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

嗯。。。。这很奇怪:我接到通知说有人回答了这个问题,但这里什么都没有。是否有人回答并删除了它?你好你在外面吗我更喜欢你的解决方案!非常感谢你的建议!
Globals.Ribbons.MyRibbon.MyObject.Text = "test";