明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6677|回复: 13

[界面] [求助]《深居浅出AutoCAD二次开发(李冠亿)》中的添加Ribbon菜单例程编译错误

  [复制链接]
发表于 2011-1-13 21:17 | 显示全部楼层 |阅读模式
我用的是AutoCAD2009,编译该书中的示例代码时出现以下错误
  1    “Autodesk.Windows.RibbonItemEnumerator”不包含“Add”的定义,并且找不到可接受类型为“Autodesk.Windows.RibbonItemEnumerator”的第一个参数的扩展方法“Add”(是否缺少 using 指令或程序集引用?)    E:\AutoCAD\Arx\参考\SJQCSample\用户交互\用户界面\菜单\Ribbon.cs    25    29    Sample
......

AcDbMgd, AcMgd, AdWindows, PresentationCore, PresentationFramework , WindowsBase这些引用我都添加了
请高手帮忙。
  1. /////////////////////////////////////////////////////////////////////////////////////////////////
  2. //http://www.bimcad.org 数字建筑
  3. //深居浅出AutoCAD二次开发(李冠亿)
  4. /////////////////////////////////////////////////////////////////////////////////////////////////

  5. using System;

  6. using Autodesk.Windows;
  7. using Autodesk.AutoCAD.Runtime;

  8. [assembly: CommandClass(typeof(Sample.Ribbon))]
  9. namespace Sample
  10. {
  11.     class Ribbon
  12.     {
  13.         [CommandMethod("AddRibbon")]
  14.         public void AddRibbon()
  15.         {
  16.             RibbonControl rc = RibbonControl();
  17.             RibbonTab rt = RibbonTab("菜单标签", "1");
  18.             RibbonPanel rp = RibbonPanel("菜单面板");
  19.             RibbonButton rb = RibbonButton("菜单按钮", "菜单命令");

  20.             rp.Source.Items.Add(rb);
  21.             rt.Panels.Add(rp);
  22.             rc.Tabs.Add(rt);
  23.         }

  24.         /// <summary>
  25.         /// 获得菜单控制
  26.         /// </summary>
  27.         /// <returns></returns>
  28.         public static RibbonControl RibbonControl()
  29.         {
  30.             if (Autodesk.Windows.ComponentManager.Ribbon == null)
  31.                 Autodesk.Windows.ComponentManager.ItemInitialized += new EventHandler<RibbonItemEventArgs>(ComponentManager_ItemInitialized);
  32.             return ComponentManager.Ribbon; //Autodesk.AutoCAD.Ribbon.RibbonServices.RibbonPaletteSet.RibbonControl; //
  33.         }

  34.         /// <summary>
  35.         /// 创建菜单标签
  36.         /// </summary>
  37.         /// <param name="Name">标签名</param>
  38.         /// <param name="id">标签ID</param>
  39.         /// <returns></returns>
  40.         public static RibbonTab RibbonTab(string Name, string id)
  41.         {
  42.             RibbonTab ribTab = new Autodesk.Windows.RibbonTab();
  43.             ribTab.Title = Name;
  44.             ribTab.Id = id;
  45.             ribTab.IsActive = true;
  46.             return ribTab;
  47.         }

  48.         /// <summary>
  49.         /// 创建菜单面板
  50.         /// </summary>
  51.         /// <param name="Title">面板名</param>
  52.         /// <returns></returns>
  53.         public static RibbonPanel RibbonPanel(string Title)
  54.         {
  55.             RibbonPanelSource ribSourcePanel = new RibbonPanelSource(); // Autodesk.Windows
  56.             ribSourcePanel.Title = Title;//now the panel
  57.             RibbonPanel ribPanel = new RibbonPanel();
  58.             ribPanel.Source = ribSourcePanel;
  59.             return ribPanel;
  60.         }

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

  76.         /// <summary>
  77.         /// 用于激活菜单
  78.         /// </summary>
  79.         /// <param name="sender"></param>
  80.         /// <param name="e"></param>
  81.         static void ComponentManager_ItemInitialized(object sender, RibbonItemEventArgs e)
  82.         {
  83.             if (Autodesk.Windows.ComponentManager.Ribbon != null)
  84.                 Autodesk.Windows.ComponentManager.ItemInitialized -= new EventHandler<RibbonItemEventArgs>(ComponentManager_ItemInitialized);
  85.         }

  86.         /// <summary>
  87.         /// 执行按钮的命令
  88.         /// </summary>
  89.         public class AdskCommandHandler : System.Windows.Input.ICommand
  90.         {
  91.             /// <summary>
  92.             /// 是否可执行(接口)
  93.             /// </summary>
  94.             /// <param name="parameter">命令名</param>
  95.             /// <returns></returns>
  96.             public bool CanExecute(object parameter)
  97.             {
  98.                 return true;
  99.             }
  100.             /// <summary>
  101.             /// 改变可执行状态
  102.             /// </summary>
  103.             public event EventHandler CanExecuteChanged;
  104.             /// <summary>
  105.             /// 执行命令
  106.             /// </summary>
  107.             /// <param name="parameter">命令的名字</param>
  108.             public void Execute(object parameter)
  109.             {
  110.                 //is from a Ribbon Button?
  111.                 RibbonButton ribBtn = parameter as RibbonButton;
  112.                 if (ribBtn != null)
  113.                     Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.SendStringToExecute((String)ribBtn.CommandParameter, true, false, true);

  114.                 //is from s Ribbon Textbox?
  115.                 RibbonTextBox ribTxt = parameter as RibbonTextBox;
  116.                 if (ribTxt != null)
  117.                     System.Windows.Forms.MessageBox.Show(ribTxt.TextValue);
  118.             }
  119.         }
  120.     }
  121. }


发表于 2011-1-13 21:33 | 显示全部楼层
哪个手册的?
 楼主| 发表于 2011-1-13 21:47 | 显示全部楼层
回复 雪山飞狐_lzh 的帖子

刚才标题搞错了,应该是《深居浅出AutoCAD二次开发(李冠亿)》这个书中的。
发表于 2011-1-14 12:28 | 显示全部楼层
Ribbon在官网教程应该可以找到一些例子吧
 楼主| 发表于 2011-1-14 18:42 | 显示全部楼层
回复 雪山飞狐_lzh 的帖子

可以给一个Ribbon官网教程的下载地址吗?
发表于 2011-1-14 21:46 | 显示全部楼层
发表于 2011-4-23 09:50 | 显示全部楼层
正想用编一个ribbon工具栏
发表于 2011-4-24 19:59 | 显示全部楼层
呃,说老实话吧,感觉这本书写的真不咋地,不过有总比没有强~~
发表于 2011-6-29 21:56 | 显示全部楼层
我的也是出现了异常:
警告        1        从不使用事件“Sample.Ribbon.AdskCommandHandler.CanExecuteChanged”        d:\my documents\visual studio 2010\Projects\sample5\sample5\Class1.cs        102        39        sample5
发表于 2011-6-30 10:01 | 显示全部楼层
09的有这个方法吗?不知道他的类库是不是完整的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 17:16 , Processed in 0.256393 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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