乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 72|回复: 4

C#版ribbon菜单

[复制链接]

22

主题

99

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
187
发表于 2013-6-5 17:35:00 | 显示全部楼层 |阅读模式
老大说整个Ribbon菜单用用。
虽然我对这Ribbon菜单没什么好感,觉得中看不中用,得点那么多下。但是用户需求啊。
给需要的童鞋共享下。参考《深入浅出二次开发》李冠亿
  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.         ///
  15.         /// 获得菜单控制
  16.         ///
  17.         /// 菜单控制
  18.         public static RibbonControl RibbonControl()
  19.         {
  20.             if (Autodesk.Windows.ComponentManager.Ribbon == null)
  21.             {
  22.                 Autodesk.Windows.ComponentManager.ItemInitialized += new EventHandler(ComponentManager_ItemInitialized);
  23.             }
  24.             return Autodesk.Windows.ComponentManager.Ribbon;
  25.         }
  26.         ///
  27.         /// 用于激活菜单
  28.         ///
  29.         ///
  30.         ///
  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(ComponentManager_ItemInitialized);
  36.             }
  37.         }
  38.         ///
  39.         /// 创建菜单标签
  40.         ///
  41.         /// 标签名
  42.         /// 标签id
  43.         /// 菜单标签
  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.         ///
  53.         /// 创建菜单面板
  54.         ///
  55.         /// 面板名
  56.         /// 菜单面板
  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.         ///
  66.         /// 创建菜单按钮
  67.         ///
  68.         /// 按钮名
  69.         /// 命令名
  70.         /// 菜单按钮
  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.       ///
  4.       /// 是否可执行接口
  5.       ///
  6.       /// 命令名
  7.       ///
  8.       public bool CanExecute(object parameter)
  9.       {
  10.           return true;
  11.       }
  12.       ///
  13.       /// 改变可执行状态
  14.       ///
  15.       public event EventHandler CanExecuteChanged;
  16.       ///
  17.       /// 执行命令
  18.       ///
  19.       /// 命令的名字
  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.     }
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2013-6-5 18:49:00 | 显示全部楼层
搞了老半天,最后用SendStringToExecute这个东西做终结者?
回复

使用道具 举报

19

主题

154

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
230
发表于 2013-6-10 15:14:00 | 显示全部楼层
怎么这个例子看起来非常眼熟?
回复

使用道具 举报

5

主题

29

帖子

1

银币

初来乍到

Rank: 1

铜币
49
发表于 2013-7-25 14:35:00 | 显示全部楼层
怎么和深入浅出那个例子一样
回复

使用道具 举报

0

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2013-8-1 17:39:00 | 显示全部楼层
有效果图么?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-29 08:05 , Processed in 0.844963 second(s), 63 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表