返回首页

{A}
{S0}
简介
本文介绍通过集中交换机更容易执行和更新路由菜单和工具栏项事件的一个组成部分。 Windows窗体设计时支持也是该软件的一个重要组成部分。背景
我一直觉得命令更新MFC中的执行架构,这是非常容易使用。尽管所有的Windows窗体部分,它仍然缺少这种架构:一个易于隔离的机制,更新菜单和工具栏基于应用程序的状态。我也想研究在Windows窗体设计时支持,看到什么是可能的。所以,我写了这个交换机在Windows窗体提供了类似的功能。说明
应用程序命令表示要在您的应用程序执行的一个动作。它可以触发一个UI项目,它可以是一个菜单项,工具栏项或直接来自代码。您的应用程序应该只处理的应用程序的命令更新和执行,而不是直接连接到UI项。一个UI项目的变化反映在应用程序的命令和其他相关的UI项。
命令可以执行应用程序的UI项目。通常,这是一个菜单或工具栏项点击。然而,它也可以在一个组合框或文本在编辑框中改变的选择变化。在UI项的任何事件可用于执行命令。可以有一个全球性的执行处理程序和/或具体执行的每个应用程序命令的处理程序。这些命令也可以直接从代码执行。
应用程序命令有时要更新。更新通常包括启用/禁用,启用/禁用或显示/隐藏。此更新也可以选择在组合框中的元素或改变在编辑框中的文本。可以有一个全球性的更新处理和/或每个应用程序的命令的特定的更新处理。此更新可以激活应用程序的命令或每个UI项目。显示上下文菜单时,应更新UI项目。通过上下文菜单中添加上下文菜单集合,在上下文菜单中的所有UI项目显示菜单时更新。
UISwitchboard使用适配器模式为支持不同类型的菜单和工具栏实现。适配器实现由UISwitchboard定义了一个接口。 NET 2.0 ToolStrip的菜单和工具栏,以及NET 1.x的菜单和工具栏,都支持每种类型的适配器。这是很容易写另一个适配器第三方菜单和工具栏包。使用代码将组件添加到工具箱
要使用交换机组件,你有Visual Studio工具箱中选择添加组件"选择项目... ..."工具箱中的上下文菜单的菜单项。在"。NET框架组件"选项卡,选择"浏览"按钮,浏览UISwitchboard.dll大会。两个新组件,ToolStripUISwitcboard和MenuToolBarUISwitchboard,现在应该会出现在工具箱中,根据"菜单放大器;工具栏"组。添加组件,形成
你现在可以添加到Windows窗体组件。只需将组件从工具箱拖放组件的表面上的形式。现在又增加了组件的形式和低于您所添加的所有其他组件的形式可见。现在,您可以更改组件的名称和其他属性。 UISwitchboard大会的引用添加到项目中,通过这一行动。
{S2}
图1:在表单组件创建应用程序的命令
下一步是定义所有的应用程序命令。这些命令应该是一个逻辑组,您将在应用程序执行的命令。您可以使用智能标记菜单上的组件或组件属性,打开"应用程序命令集合编辑器。"这个编辑器是用来添加,删除或编辑应用程序的命令。
{S3}
图2:编辑应用程序的命令
您也可以从你的代码创建应用程序的命令直接使用UISwitchboard类的属性和方法。与命令关联的UI项目
应用指令被触发UI项。项目必须能够触发执行的命令与命令相关联的。从应用程序的命令属性,可以编辑该协会开放"UIItems"集合。这将打开"UIItem协会编辑器"。这个编辑器将显示所有可用的项目,哪些项目当前命令。现在,您可以添加或删除项目和当前的命令之间的关联。

图3:编辑UI项目协会
您也可以编辑协会选择一个UI项目,该项目使用的"关于XX ApplicationCommand"的财产。选择你想从下拉列表中选择"(无)关联应用程序的命令:"如果你要删除的关联。
{五}
图4:使用属性扩展的编辑UI项目协会处理执行和更新
要处理执行和更新事件,添加事件处理程序"ApplicationCommandExecute"和"ApplicationCommandUpdate"事件上的UISwitchboard组件。这些事件处理程序会收到一个"ApplicationCommandEventArgs"的说法,包含了触发该事件有关的命令和项目的信息。通过检查这些属性,您可以更新的命令或项目,并执行适当的方法,在你的代码。下面的代码示例显示了一个通用的执行处理程序,执行命令时显示一个消息框,可用的信息。

private void toolStripExtensionCommandSwitchboard1_CommandExecute(

    object sender, ApplicationCommandEventArgs e)

{

    Control owner = sender as Control;

    ApplicationCommand command = e.ApplicationCommand;

    ToolStripItem item = e.Item as ToolStripItem;

    string ownerName = "null";

    if (owner != null)

    {

        ownerName = owner.Name;

    }

    string itemName = "null";

    if (item != null)

    {

        itemName = item.Name;

    }



    System.Windows.Forms.MessageBox.Show("G Executing command:" +

        command.ApplicationCommandName + " owner:" + ownerName +

        " item:" + itemName);

}

下面的代码示例显示了如何基于应用程序的状态更新处理更新UI项目。{C}
你也可以添加这些事件直接在应用程序的命令处理程序,如果它是更容易在全球的事件处理程序,而不是具体的事件处理程序处理的命令。关联的上下文菜单
上下文菜单需要与UISwitchboard组件相关联。如果您想更新UI项的上下文菜单时,上下文菜单中显示。你必须与UISwitchboard相关联的上下文菜单。您可以使用智能标记菜单上的组件或组件属性打开"上下文菜单协会编辑器"。现在,您可以添加或删除相关列表上下文菜单。
{中六}
图5:编辑上下文菜单协会支持的。NET 2.0的UI项目
以下UI项目NET 2.0的支持:ToolStripItem的ToolStripButton的ToolStripLabelToolStripComboBoxToolStripTextBoxToolStripProgressBarToolStripDropDownItemToolStripMenuItemToolStripSplitButtonToolStripDropDownButtonToolStripStatusLabel的ContextMenuStripNET 1.x的用户界面项目支持
以下UI项目支持NET 1.0和1.1。MenuItem的ToolBarButton的ContextMenu 可扩展性
该交换机的设计是通过使用适配器模式的可扩展。适配器处理的任务,需要知识的UI项目实现。我已老。NET 1.x中的菜单和工具栏类适配器,以及。NET 2.0的菜单和工具栏类。它应该很容易写一个第三方的菜单和工具栏包的适配器。由于设计时支持实例化一个组件加载表单时,你还必须提供一个具体UISwitchboard的派生类实例构造函数中的正确的适配器。它也可以支持除了标准的控制自己的自定义菜单或工具栏控制,延长现有的适配器之一。源代码包含这个扩展的一个例子。设计时支持
此组件的目标是可以很容易地添加应用程序的命令,将它们连接到用户界面项目。解决的办法是设计时支持。设计时支持自动任务,如发现所有的UI项,他们在一个易于使用的用户界面。UISwitchboard设计师
设计时支持的一个组件需要一个设计师。 UISwitchboardComponentDesigner类实现所需的功能支持UISwitchboard组件。智能标记
Office智能标记类似,Visual Studio的智能标签,适用于你的工作范围内共同任务。组件设计器类提供支持定义的命令,应作为智能标记命令。应用指令
应用程序的命令是通过"ApplicationCommand集合编辑器编辑。"这个设计时的形式提供支持创建,删除和编辑应用程序的命令。
{七}
图6:应用命令集合编辑器UI项目协会
每个UI项目需要一个应用程序的命令关联。这个设计时的形式提供支持当前应用程序的命令相关联的的UI项目。

图7:UIItem协会主编属性扩展
也可以从项目属性相关联的项目。我使用的属性扩展,添加到每个受支持的项目的属性,它可以让你选择一个应用程序的命令。兴趣点
发生了两个重大的启示在此编程工作,除了很多小的:设计时对象总是需要从Component类继承。这将使所有的设计时支持,仿佛用法术。没有这种继承,奇怪的事情发生。组件的属性总是需要一个get和set方法,在设计时序列化。我有一个很难找到的一些设计时功能的信息。当我最后用检查Microsoft SplitterPanel组件,那么一切很容易,我只需要几行代码,使一切工作。
我产生了通过Sandcastle的参考手册。这是包含在源代码下载。 条款和条件
UISwitchboard组件提供源代码的自由软件。你可以自由地使用它在您的应用程序,商业还是非商业。 Bjrn Sundby,组件的作者,拥有版​​权的组件,任何在您的应用程序中使用这个组件,直接或间接造成的损害不承担任何责任。历史
2007年5月1日原来的文章

回答

评论会员:游客 时间:2011/12/14
我做错了什么?我。NET3.5中使用VS2008和我你的组件添加到我的工具箱和一个MenuToolBarUISwitchboard下降的形式(一个简单的记事本,去年秋季的文本编辑器)创建几个命令在ApplicationCommands集合然后去UIItems协会编辑的"可用项目"框中完全是空的,如在下面的截图:IMGSRC="htt​​ps://webfiles.uci.edu/bchart/images/screenshotTester。JPG?uniq的8rr9bu"/我做错了什么?我要深入示范项目的代码,找出,我会让你知道我拿出。任何建议的平均时间将不胜感激。很抱歉听到有关火山灰云在欧洲!此致,布赖恩哈特
YoniP
评论会员:游客 时间:2011/12/14
"修复另一个Microsoft错误"imgsrc=http://www.orcode.com/upimg/2011_12_14_12_31_06_9.gifimgsrc=http://www.orcode.com/upimg/2011_12_14_12_31_06_10.gif
sotona
评论会员:游客 时间:2011/12/14
http://msdn.microsoft.com/msdnmag/issues/02/10/CommandManagement/default。ASPX
朗尼麦卡洛
评论会员:游客 时间:2011/12/14
这个链接。我一直在寻找类似的东西。imgsrc=http://www.orcode.com/upimg/2011_12_14_12_31_06_11.gif