gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:51:15 34 4
gpt4 key购买 nike

我一直在开发一个 Visual Studio 扩展作为 VS2008/2010 的插件。现在的新版本将仅作为 VS2010 的 VSIX 包完成(因为无论如何它必须是 .NET 4),并且我在处理 UI 时遇到了一些麻烦(我认为相当简单)。

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

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

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

为了了解如何执行此操作,我只有一个工具栏,其中包含一组中的两个按钮。 btnAction 非常简单;只是一个图标和一个执行处理程序来更改另一个按钮上的文本,没有 CommandFlags。
btnLabel 在 .vsct 中如下所示:

<Button guid="guidVSPackageBuilderTutorialCommandSet" id="btnLabel" priority="0x0100">
<CommandFlag>DefaultDisabled</CommandFlag>
<CommandFlag>DontCache</CommandFlag>
<CommandFlag>NoCustomize</CommandFlag>
<CommandFlag>TextChanges</CommandFlag>
<CommandFlag>TextOnly</CommandFlag>
<Strings>
<CommandName>cmdidbtnLabel</CommandName>
<ButtonText>btnLabel</ButtonText>
<MenuText>btnLabel</MenuText>
<ToolTipText>Tooltip btnLabel</ToolTipText>
</Strings>
</Button>

第一个问题是当我使用 文本更改 , ToolTipText 字符串被忽略,ButtonText 最初也用于工具提示。

Action 按钮的处理程序代码如下:

private int iClickCount = 0;

protected override void btnActionExecuteHandler(object sender, EventArgs e)
{
var svc = GetService(typeof(IMenuCommandService)) as OleMenuCommandService;

CommandID idBtnLabel = new CommandID(GuidList.guidVSPackageBuilderTutorialCmdSet, (int)PkgCmdIDList.btnLabel);
var cmd = svc.FindCommand(idBtnLabel) as OleMenuCommand;

cmd.Text = "Clicked " + (++iClickCount) + " times";
}

这会按预期更改 btnLabel 的标题,但由于无法显式指定工具提示(OleMenuCommand 对象只有一个 Text 属性,与 CommandBarButton 不同,它同时具有 Caption 和 TooltipText),因此工具提示始终设置为相同的字符串作为标题。据我了解,这是因为使用 FindCommand() 我实际上并没有获得 UI 按钮,而只是获得了与工具提示无关的底层命令。

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

我查看了各种 IVs 接口(interface)和 SVs 服务,但找不到合适的东西,而且文档(和 IntelliSense 帮助)似乎不是很广泛。

最佳答案

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

关于visual-studio - VSPackage:在运行时修改工具栏按钮文本/工具提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4014822/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com