怎么实现一个自定义的类似于menustrip或者别的winform控件的属性,Items,点开后是一个左边成员,右边属性的模态属性窗口。我是想实现一个自定义的,通过继承UITypeEditor已经能实现。我是觉得如果自己写右边的属性窗口是不是太麻烦???我的实现思路,定义一个窗体,左边是一个list的控件,用于放置对象集合,选中对象后,在右边显示对象属性,但是对象的属性的显示窗口如果也手工完成,是不是太麻烦??不知道我说的明白没有。

解决方案 »

  1.   

    你可以用PropertyGrid控件啊,.Net自带的
    点击左边的List控件时,把你选中的控件给PropertyGrid控件SelectedObject属性就可以了
      

  2.   

    仅供参考。
     [Designer(typeof(MyRadioListControl.AddRadioButtonItemDesigner))]
        public class MyRadioListControl : System.Windows.Forms.Control
        {
     
           public  List<RadioButton> radioButtons = new List<RadioButton>();
           public int columns = 5;
           public int rows = 1;
           public Arrangement arrangement = Arrangement .Compact ;       [Browsable(false )]
           [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible ), DefaultValue(Arrangement.Compact)]
           public Arrangement myArrangement
           {
               get
               {
                   return arrangement;
               }
               set
               {
                   arrangement = value;
               }
           }
           public enum Arrangement 
           {
              Compact,
              Equally,       }    
           [Browsable(true)]
           [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible ), DefaultValue(5)]
           public int myColumns
           {
               get
               {
                   return columns;
               }
               set
               {
                   columns = value;
               }
           }       [Browsable(false )]
           [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible ), DefaultValue("5")]
           public int myRows
           {
               get
               {
                   return rows;
               }
               set
               {
                   rows = value;
               }
           }        public MyRadioListControl()
            {        }
           /// <summary>
           /// 获取或设置RadioButtonItems集合
           /// </summary>
            [Browsable(true)]
            [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Content)]
            public List<RadioButton> myRadioButtonItem
            {
                get
                {
                    return radioButtons;
                }
                set
                {
                  
                    radioButtons = value;               
                }
            }        protected override void OnPaint(PaintEventArgs e)
            {
                base.OnPaint(e);
                foreach (RadioButton rb in myRadioButtonItem)
                {
                    this.Controls.Add(rb);
                }
                int a = 0;
                foreach (RadioButton rb in myRadioButtonItem)
                {
                   // int rowsTotle = (int )(a / rowcount);
                    int TheRow=(int )(a /myColumns  );
                    int TheColumn = (a % myColumns );
                    rb.Location = new Point( TheColumn* rb.Width, TheRow * rb.Height);//纵排
                    a++;
                }
            }
          //谓词使用
            internal class AddRadioButtonItemDesigner : ControlDesigner
            {
               
                private DesignerVerbCollection verbs = null;
                private void OnAddItem( object sender, EventArgs e)
                {
                   
                    MessageBox.Show("to do code ");
                 Control.BackColor = Color.Red;
                }
                public override DesignerVerbCollection Verbs
                {                get
                    {                    if (verbs == null)
                        {                        verbs = new DesignerVerbCollection();                        verbs.Add(new DesignerVerb("AddItem", new EventHandler(OnAddItem)));
                          
                            //   verbs.Add(new DesignerVerb(  "Equally", new EventHandler(OnVerbBlue)));                        //  verbs.Add(new DesignerVerb(   "Green",  new EventHandler(OnVerbGreen)));                    }                    return verbs;                }            }
            }
        
        }