仅供参考。 [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 {
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; } } }
点击左边的List控件时,把你选中的控件给PropertyGrid控件SelectedObject属性就可以了
[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; } }
}
}