65.9K
CodeProject 正在变化。 阅读更多。
Home

将多个 UI 元素连接到单个命令对象

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.44/5 (14投票s)

2008年4月18日

CPOL

2分钟阅读

viewsIcon

29609

downloadIcon

231

一种简单的方法,将几个 UI 元素(菜单项、工具栏按钮等)分组在一起,使它们都执行相同的命令,并一起启用/禁用(带有 Visual Studio 设计器支持)。

引言

通常,当单击时,同时存在一个菜单项和一个工具栏按钮来执行相同的操作。有时,甚至还有第三个或第四个控件(比如一个按钮和一个上下文菜单项)做同样的事情。这些控件需要一起启用和禁用。

本文中的代码允许将每个此类控件连接到 UICommand 对象,方法是在 Visual Studio 设计器中设置一个属性。 UICommand 对象有一个 Enabled 属性,用于启用或禁用所有关联的控件。 它还有一个 Execute 事件,当单击任何控件时,该事件会被触发。

使用代码

下载演示代码。 CommandDemo 项目包含两个类,UICommandUICommandProvider。 将关联的文件复制到您的项目中并编译。 只要表单设计器打开,这些类就会出现在工具箱中,如下所示

CommandDemoDesigner.PNG

首先,将 UICommandProvider 的一个实例拖到表单上。 它将出现在设计器的组件区域(靠近底部),如上图所示。 每个表单只需要一个 UICommandProvider 实例。 因为 UICommandProvider 实现了 IExtenderProvider,并且它的 CanExtend 方法对任何派生自 ToolStripItemControl 的对象都返回 true,所以 Visual Studio 设计器会将一个新属性添加到这些对象中。 该属性的类型为 UICommand

演示项目包含两个 UICommand 实例:uiCommand1uiCommand2。 其中每个对象都连接到另外四个控件:一个普通按钮、一个工具栏按钮、一个菜单项(在“命令”菜单下)和一个上下文菜单项。 这是通过将两个 UICommand 实例拖到表单上,然后将每个控件的 UICommand 属性设置为 UICommand 的相应实例来完成的。 例如,以下屏幕截图显示了 button2.UICommand 被设置为 uiCommand2

CommandDemoProperty.PNG

结果是,每当单击 button2(或其 UICommand 属性设置为 uiCommand2 的任何其他控件)时,就会触发事件 uiCommand2.Execute。 此外,每当设置 uiCommand2.Enabled 时,也会设置关联控件的 Enabled 属性。

为了本演示的目的,每个 UICommandExecute 处理程序都只是切换另一个 UICommandEnabled 属性。 这使得很容易看到一行代码可以启用或禁用表单上的几个控件。 以下是两个事件处理程序

private void uiCommand1_Execute(object sender, EventArgs e) {
    uiCommand2.Enabled = !uiCommand2.Enabled; 
} 

private void uiCommand2_Execute(object sender, EventArgs e) {
    uiCommand1.Enabled = !uiCommand1.Enabled; 
}

UICommand 可能会被扩展为具有 Image 属性,该属性导致关联控件具有相同的图像(如果合适),ToolTip 属性为所有控件分配相同的工具提示文本等等。 我将其留给读者作为练习。

© . All rights reserved.