bobeeeeee 发表于 2011-1-13 21:17:00

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

我用的是2009,编译该书中的示例代码时出现以下错误
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这些引用我都添加了
请高手帮忙。
/////////////////////////////////////////////////////////////////////////////////////////////////
//http://www.bimcad.org 数字建筑
//深居浅出AutoCAD二次开发(李冠亿)
/////////////////////////////////////////////////////////////////////////////////////////////////
using System;
using Autodesk.Windows;
using Autodesk.AutoCAD.Runtime;

namespace Sample
{
    class Ribbon
    {
      
      public void AddRibbon()
      {
            RibbonControl rc = RibbonControl();
            RibbonTab rt = RibbonTab("菜单标签", "1");
            RibbonPanel rp = RibbonPanel("菜单面板");
            RibbonButton rb = RibbonButton("菜单按钮", "菜单命令");
            rp.Source.Items.Add(rb);
            rt.Panels.Add(rp);
            rc.Tabs.Add(rt);
      }
      ///
      /// 获得菜单控制
      ///
      ///
      public static RibbonControl RibbonControl()
      {
            if (Autodesk.Windows.ComponentManager.Ribbon == null)
                Autodesk.Windows.ComponentManager.ItemInitialized += new EventHandler(ComponentManager_ItemInitialized);
            return ComponentManager.Ribbon; //Autodesk.AutoCAD.Ribbon.RibbonServices.RibbonPaletteSet.RibbonControl; //
      }
      ///
      /// 创建菜单标签
      ///
      /// 标签名
      /// 标签ID
      ///
      public static RibbonTab RibbonTab(string Name, string id)
      {
            RibbonTab ribTab = new Autodesk.Windows.RibbonTab();
            ribTab.Title = Name;
            ribTab.Id = id;
            ribTab.IsActive = true;
            return ribTab;
      }
      ///
      /// 创建菜单面板
      ///
      /// 面板名
      ///
      public static RibbonPanel RibbonPanel(string Title)
      {
            RibbonPanelSource ribSourcePanel = new RibbonPanelSource(); // Autodesk.Windows
            ribSourcePanel.Title = Title;//now the panel
            RibbonPanel ribPanel = new RibbonPanel();
            ribPanel.Source = ribSourcePanel;
            return ribPanel;
      }
      ///
      /// 创建菜单按钮
      ///
      /// 按钮名
      /// 命令名
      ///
      public static RibbonButton RibbonButton(string btName, string cmdName)
      {
            RibbonButton ribButton = new RibbonButton();
            ribButton.Text = btName;
            ribButton.CommandParameter = cmdName;
            ribButton.ShowText = true;
            ribButton.CommandHandler = new AdskCommandHandler();
            return ribButton;
      }
      ///
      /// 用于激活菜单
      ///
      ///
      ///
      static void ComponentManager_ItemInitialized(object sender, RibbonItemEventArgs e)
      {
            if (Autodesk.Windows.ComponentManager.Ribbon != null)
                Autodesk.Windows.ComponentManager.ItemInitialized -= new EventHandler(ComponentManager_ItemInitialized);
      }
      ///
      /// 执行按钮的命令
      ///
      public class AdskCommandHandler : System.Windows.Input.ICommand
      {
            ///
            /// 是否可执行(接口)
            ///
            /// 命令名
            ///
            public bool CanExecute(object parameter)
            {
                return true;
            }
            ///
            /// 改变可执行状态
            ///
            public event EventHandler CanExecuteChanged;
            ///
            /// 执行命令
            ///
            /// 命令的名字
            public void Execute(object parameter)
            {
                //is from a Ribbon Button?
                RibbonButton ribBtn = parameter as RibbonButton;
                if (ribBtn != null)
                  Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.SendStringToExecute((String)ribBtn.CommandParameter, true, false, true);
                //is from s Ribbon Textbox?
                RibbonTextBox ribTxt = parameter as RibbonTextBox;
                if (ribTxt != null)
                  System.Windows.Forms.MessageBox.Show(ribTxt.TextValue);
            }
      }
    }
}

雪山飞狐_lzh 发表于 2011-1-13 21:33:00

哪个手册的?

bobeeeeee 发表于 2011-1-13 21:47:00

回复
刚才标题搞错了,应该是《深居浅出AutoCAD二次开发(李冠亿)》这个书中的。

雪山飞狐_lzh 发表于 2011-1-14 12:28:00

Ribbon在官网教程应该可以找到一些例子吧

bobeeeeee 发表于 2011-1-14 18:42:00

回复
可以给一个Ribbon官网教程的下载地址吗?

雪山飞狐_lzh 发表于 2011-1-14 21:46:00

http://www.adskconsulting.com/adn/cs/api_course_sched.php

sanjie 发表于 2011-4-23 09:50:00

正想用编一个ribbon工具栏

cdinten 发表于 2011-4-24 19:59:00

呃,说老实话吧,感觉这本书写的真不咋地,不过有总比没有强~~

mhmenghua 发表于 2011-6-29 21:56:00

我的也是出现了异常:
警告      1      从不使用事件“Sample.Ribbon.AdskCommandHandler.CanExecuteChanged”      d:\my documents\visual studio 2010\Projects\sample5\sample5\Class1.cs      102      39      sample5

cdinten 发表于 2011-6-30 10:01:00

09的有这个方法吗?不知道他的类库是不是完整的
页: [1]
查看完整版本: [求助]《深居浅出AutoCAD二次开发(李冠亿)》中的添加Ribbon菜单例程编译错误