明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3928|回复: 4

[界面] C#版ribbon菜单

[复制链接]
发表于 2013-6-5 17:35:43 | 显示全部楼层 |阅读模式
本帖最后由 epwt 于 2013-7-25 17:16 编辑

老大说整个Ribbon菜单用用。
虽然我对这Ribbon菜单没什么好感,觉得中看不中用,得点那么多下。但是用户需求啊。
给需要的童鞋共享下。参考《深入浅出AutoCAD二次开发》李冠亿


  1. public class RibbonMenu
  2.     {
  3.         [CommandMethod("AddRibbon")]
  4.         public void AddRibbon()
  5.         {
  6.             RibbonControl rc = RibbonControl();
  7.             RibbonTab rt = RibbonTab("我的自定义菜单","1");
  8.             RibbonPanel rp = RibbonPanel("菜单面板");
  9.             RibbonButton rb = RibbonButton("菜单按钮","菜单命令");

  10.             rp.Source.Items.Add(rb);
  11.             rt.Panels.Add(rp);
  12.             rc.Tabs.Add(rt);
  13.         }

  14.         /// <summary>
  15.         /// 获得菜单控制
  16.         /// </summary>
  17.         /// <returns>菜单控制</returns>
  18.         public static RibbonControl RibbonControl()
  19.         {
  20.             if (Autodesk.Windows.ComponentManager.Ribbon == null)
  21.             {
  22.                 Autodesk.Windows.ComponentManager.ItemInitialized += new EventHandler<RibbonItemEventArgs>(ComponentManager_ItemInitialized);
  23.             }
  24.             return Autodesk.Windows.ComponentManager.Ribbon;
  25.         }

  26.         /// <summary>
  27.         /// 用于激活菜单
  28.         /// </summary>
  29.         /// <param name="sender"></param>
  30.         /// <param name="e"></param>
  31.         static void ComponentManager_ItemInitialized(object sender, RibbonItemEventArgs e)
  32.         {
  33.             if (Autodesk.Windows.ComponentManager.Ribbon != null)
  34.             {
  35.                 Autodesk.Windows.ComponentManager.ItemInitialized -= new EventHandler<RibbonItemEventArgs>(ComponentManager_ItemInitialized);
  36.             }
  37.         }

  38.         /// <summary>
  39.         /// 创建菜单标签
  40.         /// </summary>
  41.         /// <param name="name">标签名</param>
  42.         /// <param name="id">标签id</param>
  43.         /// <returns>菜单标签</returns>
  44.         public static RibbonTab RibbonTab(string name, string id)
  45.         {
  46.             RibbonTab ribTab = new RibbonTab();
  47.             ribTab.Title = name;
  48.             ribTab.Id = id;
  49.             ribTab.IsActive = true;
  50.             return ribTab;
  51.         }

  52.         /// <summary>
  53.         /// 创建菜单面板
  54.         /// </summary>
  55.         /// <param name="title">面板名</param>
  56.         /// <returns>菜单面板</returns>
  57.         public static RibbonPanel RibbonPanel(string title)
  58.         {
  59.             RibbonPanelSource ribSourcePanel = new RibbonPanelSource();
  60.             ribSourcePanel.Title = title;
  61.             RibbonPanel ribPanel = new RibbonPanel();
  62.             ribPanel.Source = ribSourcePanel;
  63.             return ribPanel;
  64.         }

  65.         /// <summary>
  66.         /// 创建菜单按钮
  67.         /// </summary>
  68.         /// <param name="btName">按钮名</param>
  69.         /// <param name="cmdName">命令名</param>
  70.         /// <returns>菜单按钮</returns>
  71.         public static RibbonButton RibbonButton(string btName, string cmdName)
  72.         {
  73.             RibbonButton ribButton = new RibbonButton();
  74.             ribButton.Text = btName;
  75.             ribButton.CommandParameter = cmdName;
  76.             ribButton.ShowText = true;
  77.             ribButton.CommandHandler = new CommandHandler();
  78.             return ribButton;
  79.         }
  80.         
  81.     }


  1. public  class CommandHandler:System.Windows.Input.ICommand
  2.     {
  3.       /// <summary>
  4.       /// 是否可执行接口
  5.       /// </summary>
  6.       /// <param name="parameter">命令名</param>
  7.       /// <returns></returns>
  8.       public bool CanExecute(object parameter)
  9.       {
  10.           return true;
  11.       }

  12.       /// <summary>
  13.       /// 改变可执行状态
  14.       /// </summary>
  15.       public event EventHandler CanExecuteChanged;

  16.       /// <summary>
  17.       /// 执行命令
  18.       /// </summary>
  19.       /// <param name="parameter">命令的名字</param>
  20.       public void Execute(object parameter)
  21.       {
  22.           RibbonButton ribBtn = parameter as RibbonButton;
  23.           if (ribBtn != null)
  24.           {
  25.               Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.SendStringToExecute((String)ribBtn.CommandParameter,true,false,true);
  26.               RibbonTextBox ribTxt = parameter as RibbonTextBox;
  27.               if (ribTxt != null)
  28.               {
  29.                   MessageBox.Show(ribTxt.TextValue);
  30.               }
  31.           }
  32.       }
  33.     }


评分

参与人数 1明经币 +1 收起 理由
mccad + 1 赞一个!

查看全部评分

发表于 2013-6-5 18:49:00 | 显示全部楼层
搞了老半天,最后用SendStringToExecute这个东西做终结者?
发表于 2013-6-10 15:14:52 | 显示全部楼层
怎么这个例子看起来非常眼熟?
发表于 2013-7-25 14:35:15 | 显示全部楼层
怎么和深入浅出那个例子一样
发表于 2013-8-1 17:39:03 | 显示全部楼层
有效果图么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 15:41 , Processed in 0.252214 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表