多个按钮的 CommandBarButton 单击事件

Bad*_*boy 3 c# vsto visio add-in

我需要在 Visio 窗口中使用一组按钮创建自己的工具栏。下一个代码生成工具栏(有效),创建按钮(有效),并为它们分配 Click 事件处理程序。

vsoCommandBar = vsoCommandBars.Add("MyCommandBat", Office.MsoBarPosition.msoBarTop, false, true);

var vsoButtonX1 = (Office.CommandBarButton)vsoCommandBar.Controls.Add(
    Office.MsoControlType.msoControlButton, 1, 2, 1, false);
vsoButtonX1.Caption = "Test1";
vsoButtonX1.Tag = "";
vsoButtonX1.Click += GlobalEvents.btnTestClick;

var vsoButtonX2 = (Office.CommandBarButton)vsoCommandBar.Controls.Add(
    Office.MsoControlType.msoControlButton, 1, 2, 2, false);
vsoButtonX2.Caption = "Test2";
vsoButtonX2.Tag = "";
vsoButtonX2.Click += GlobalEvents.btnTest2Click;
Run Code Online (Sandbox Code Playgroud)

处理程序很简单,但不同(当然)。

public void btnTestClick(Office.CommandBarButton vsoButton, ref bool cancelDefault)
{
    MessageBox.Show("btnTestClick!");
}

public void btnTest2Click(Office.CommandBarButton vsoButton, ref bool cancelDefault)
{
    MessageBox.Show("btnTest2Click!");
}
Run Code Online (Sandbox Code Playgroud)

当我单击任何按钮时,我会看到带有“btnTestClick!”的对话框。并在按下带有“btnTest2Click!”的“确定”对话框后。在两个按钮中的任何一个上。

此外,如果我跳过这一行:

vsoButtonX2.Click += GlobalEvents.btnTest2Click;
Run Code Online (Sandbox Code Playgroud)

我会看到单个对话框“btnTestClick!” 在任何按钮上。

至少对于命令栏,它似乎只有一个单击处理器。是真的吗?!

PS:当然,我可以使用“vsoButton”参数和标签来检测按钮被按下,但使用不同的事件处理程序似乎更方便......这可能吗?

Bad*_*boy 5

Visio 通过按钮区分按钮...标签...

vsoButtonX1.Tag = "1";
vsoButtonX2.Tag = "2";
Run Code Online (Sandbox Code Playgroud)

解决了这个问题......我把问题留了下来,也许它会帮助smb......