Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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
Visual studio VSPackage:在运行时修改工具栏按钮文本/工具提示_Visual Studio_Visual Studio 2010_Vsix_Vspackage - Fatal编程技术网

Visual studio VSPackage:在运行时修改工具栏按钮文本/工具提示

Visual studio VSPackage:在运行时修改工具栏按钮文本/工具提示,visual-studio,visual-studio-2010,vsix,vspackage,Visual Studio,Visual Studio 2010,Vsix,Vspackage,我一直在开发一个VisualStudio扩展作为VS2008/2010的附加模块。新版本现在只作为VS2010的VSIX包(无论如何它必须是.NET4),我在UI处理方面遇到了一些问题(我认为相当简单) 该扩展主要由一个工具栏组成,工具栏上有一些按钮可以启动各种动作、表单等,还有一些按钮仅用作显示某些状态信息的标签。“标签”按钮本身只显示非常简短的信息,而工具提示提供了更多细节 虽然我不认为整个外接程序是非常优雅的,但做这种事情非常简单(尽管我的方法可能有点业余)。将命令添加到工具栏时,我会将“

我一直在开发一个VisualStudio扩展作为VS2008/2010的附加模块。新版本现在只作为VS2010的VSIX包(无论如何它必须是.NET4),我在UI处理方面遇到了一些问题(我认为相当简单)

该扩展主要由一个工具栏组成,工具栏上有一些按钮可以启动各种动作、表单等,还有一些按钮仅用作显示某些状态信息的标签。“标签”按钮本身只显示非常简短的信息,而工具提示提供了更多细节

虽然我不认为整个外接程序是非常优雅的,但做这种事情非常简单(尽管我的方法可能有点业余)。将命令添加到工具栏时,我会将“标签”按钮“保存”在特定的局部变量中,以便以后可以随意设置标题和工具提示文本

在VSPackage中,与Microsoft.VisualStudio.CommandBars.CommandBarButton等效的是OleMenuCommand。通过MenuCommandService查找“label”命令没有问题,但是可以根据需要修改它

为了了解如何做到这一点,我在一个组中有一个带有两个按钮的工具栏。操作非常简单;只有一个图标和一个执行处理程序来更改另一个按钮上的文本,没有CommandFlags。 btnLabel在.vsct中看起来像这样:


默认禁用
唐奇
不定制
文本更改
纯文本
cmdidbtnLabel
btnLabel
btnLabel
工具提示btnLabel
第一个问题是,当我使用文本更改时,ToolTipText字符串被忽略,ButtonText最初也用于工具提示

操作按钮的处理程序代码如下所示:

private int iClickCount=0;
受保护的覆盖无效btnActionExecuteHandler(对象发送方,事件参数e)
{
var svc=GetService(typeof(IMenuCommandService))作为OleMenuCommandService;
CommandID IDBTNLABLE=new CommandID(GuidList.guidvspackagebuilderutorialcmdset,(int)pkgcmdilist.btnLabel);
var cmd=svc.FindCommand(idbtnlab)作为OleMenuCommand;
cmd.Text=“单击”+(++iClickCount)+“次数”;
}
这将按预期更改btnLabel的标题,但由于无法显式指定工具提示(OleMenuCommand对象只有一个文本属性,与CommandBarButton不同,CommandBarButton同时具有标题和工具提示文本),因此工具提示始终设置为与标题相同的字符串。据我所知,这是因为在FindCommand()中,我实际上并没有得到UI按钮,而是得到了底层命令,它不关心工具提示

更令人困惑的是,当我使用TextChangesButtonCommandFlag而不是TextChanges时会发生什么。该按钮现在将正确显示在.vsct中定义的工具提示文本,但当我单击另一个按钮时,标题和工具提示都不会更改-尽管当我检查btnLabel命令的text属性时,它被设置为我所期望的(“单击x次”)。TextChangesButton是否将命令和按钮的属性“解耦”?如果是这样的话,这正是我想要的(我不关心命令,因为无论如何都没有什么可执行的;btnLabel将始终被禁用),但是我如何访问按钮及其特定的字符串属性呢


我查看了各种IVs接口和SVs服务,但没有找到合适的内容,文档(和IntelliSense帮助)似乎也不是很全面。

我自己回答这个问题-据VS团队的一位成员说,新的扩展性结构没有提供访问控件的这些属性的方法。对于我想要实现的目标,有必要采用老式的方式来获取DTE对象,找到我的工具栏和控件,并简单地将它们作为CommandBarButtons处理,就像我在外接程序中所做的那样