我写了一个组件,用下面语句描述,在工具箱里面能够看见我的组件,可是拖出来,它老是跑到设计面板下面去了(比如窗体),
我希望能够把它拖出来就显示到设计面板上,当然我试了把[Designer(typeof(CompDesigner1))]去掉就可以了,不过我在
CompDesigner1中给组件加了几个菜单,用来自动生成一些熟悉,所以我希望能够显示出控件,这些自定义的菜单也能保留,我知道这样肯定是可以的,VS自带了许多控件都有这个功能,比如combobox,鼠标瞄上面后,它的右上角会出现一个小箭头,点击就会出来一系列菜单,我就是想实现这个效果,请大师们指教,下面是我类的申明:    [ToolboxItem(true)]
    [ToolboxBitmap(@"D:\BjdddCSharpDev\Components\Resources\1.bmp")]
    [Designer(typeof(CompDesigner1))]
    public partial class ComponentTest1 : PictureBox其中CompDesigner1继承于:    public class CompDesigner1 : ComponentDesigner

解决方案 »

  1.   

    trypublic class CompDesigner1 : ComponentDesigner
    =》
    public class CompDesigner1 : DocumentDesigner
      

  2.   

    非常感谢,但是我生成后拖出来抛错,不知道是什么原因
    抛错如下:服务容器中已存在服务System.Windows.Forms.Design.IEventHandlerService.
             参数名:serviceType
    请帮我分析下,谢谢
      

  3.   

    我的代码是:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.ComponentModel.Design;
    using System.Windows.Forms;
    using System.ComponentModel;
    using System.Windows.Forms.Design;namespace Bjddd.Dev.Components
    {
        public class CompDesigner1 : DocumentDesigner
        {
            ComponentTest test;
            IDesignerHost host;
            IComponentChangeService service;
            DesignerTransaction designTran;
            string testName;        DesignerVerbCollection m_verbs;        public override DesignerVerbCollection Verbs
            {
                get
                {
                    if (m_verbs == null)
                    {
                        m_verbs = new DesignerVerbCollection();
                        m_verbs.Add(new DesignerVerb("生成东东", new EventHandler(OnGen)));
                        m_verbs.Add(new DesignerVerb("生成DD", new EventHandler(OnDD)));
                    }
                    return m_verbs;
                }
            }        private void OnGen(object sender, EventArgs e)
            {
                if (Component is ComponentTest)
                {
                    test = (ComponentTest)Component;
                    host = (IDesignerHost)GetService(typeof(IDesignerHost));
                    testName = TypeDescriptor.GetProperties(Component)["Name"].GetValue(Component).ToString();                if (host == null)
                    {
                        return;
                    }                if (test.ID != 1000000)
                    {
                        designTran = host.CreateTransaction();
                        service = (IComponentChangeService)GetService(typeof(IComponentChangeService));
                        test.ID = 1000000;
                        service.OnComponentChanged(test, null, null, null);
                        designTran.Commit();
                        MessageBox.Show("生成成功!");
                    }
                }
            }        private void OnDD(object sender, EventArgs e)
            {
                if (Component is ComponentTest)
                {
                    test = (ComponentTest)Component;
                    host = (IDesignerHost)GetService(typeof(IDesignerHost));
                    testName = TypeDescriptor.GetProperties(Component)["Name"].GetValue(Component).ToString();                if (host == null)
                    {
                        return;
                    }                if (test.Fields != null)
                    {
                        designTran = host.CreateTransaction();
                        service = (IComponentChangeService)GetService(typeof(IComponentChangeService));
                        test.Fields.Add(1);
                        test.Fields.Add(2);
                        service.OnComponentChanged(test, null, null, null);
                        Button b = (Button)host.CreateComponent(typeof(Button));
                        
                        designTran.Commit();
                        MessageBox.Show("生成成功!");
                    }
                }
            }    }
    }
      

  4.   

    可以,启动两个vs.net ,一个加载控件,一个附加到那个vs.net 的进程