Winforms:在设计器中创建对象并对其进行自定义

时间:2016-02-01 15:18:22

标签: c# winforms devexpress windows-forms-designer

我在Winforms(C#)中创建一个新组件。此Component获取一些属性来修改行为。用户应该在其表单上提取组件,设置一些属性并准备就绪。如果我想设置常见ComponentType的属性(如Form),则没有问题。但是我得到了一个BindingList<>()属性,它不是由Designer生成的。

enter image description here

无法设置StandardItems属性。用户可以通过AddItem-Dialog添加项目,但从不创建BindingList。

[Category("Einstellungen")]
[Browsable(true)]      
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public BindingList<StandardItems> StandardItems
{
   get { return _standardItems; }
   set
   {
     _standardItems = value;
     _standardItems.ListChanged -= _standardItems_ListChanged;
     _standardItems.ListChanged += _standardItems_ListChanged;
    }
}

我以为Designer会为我创建列表。因此我可以直接通过设计师添加项目。

这是我的组件的Designer-Code:

this.menuBar1.BarManager = null;
this.menuBar1.DockCol = 0;
this.menuBar1.OptionsBar.AllowQuickCustomization = false;
this.menuBar1.OptionsBar.DrawDragBorder = false;
this.menuBar1.OptionsBar.RotateWhenVertical = false;
this.menuBar1.OptionsBar.UseWholeRow = true;
this.menuBar1.ParentForm = null;
this.menuBar1.PopupMenu = null;

我认为必须有类似的东西:

this.menuBar1.StandardItems = null;

this.menuBar1.StandardItems = new BindingList<StandardItems>();

因此,我可以通过Designer添加项目,设计师添加如下代码:

this.menuBar1.StandardItems.Add(new StandardItem());

是否有任何属性或某些东西丢失?

1 个答案:

答案 0 :(得分:1)

您需要在自定义组件中创建项目,因为Designer不知道如何创建新的BindingList<StandardItems>。因此,如果您自己创建BindingList,则Designer可以使用此列表向其中添加值:

public class MenuBar : Component
{
    BindingList<StandardItems> _standardItems = new BindingList<StandardItems>()

    [Category("Einstellungen")]
    [Browsable(true)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]    
    public BindingList<StandardItems> StandardItems
    {
        get { return _standardItems; }
        set
        {
            _standardItems = value;
            _standardItems.ListChanged -= _standardItems_ListChanged;
            _standardItems.ListChanged += _standardItems_ListChanged;
        }
    }
}

这是您可以生成的设计器代码:

StandardItems standardItems1 = new StandardItems();
StandardItems standardItems2 = new StandardItems();

//

this.menuBar1.BarManager = null;
this.menuBar1.DockCol = 0;
this.menuBar1.OptionsBar.AllowQuickCustomization = false;
this.menuBar1.OptionsBar.DrawDragBorder = false;
this.menuBar1.OptionsBar.RotateWhenVertical = false;
this.menuBar1.OptionsBar.UseWholeRow = true;
this.menuBar1.ParentForm = null;
this.menuBar1.PopupMenu = null;
standardItems1.SomeProperty = 0;
standardItems1.SomeAnotherProperty = "Property0";
standardItems2.SomeProperty = 1;
standardItems2.SomeAnotherProperty = "Property1";
this.menuBar1.StandardItems.Add(standardItems1);
this.menuBar1.StandardItems.Add(standardItems2);