Winforms:在设计器中创建对象并对其进行自定义
Winforms: Create object in designer and customize it
我正在 Winforms (C#) 中创建一个新组件。该组件获取一些属性来修改行为。用户应该将组件拉到他的表单上,设置一些属性并准备就绪。如果我想设置一个 属性 的通用 ComponentType(如 Form),没有问题。但是我得到了一个 BindingList<>()
属性,它不是由设计师生成的。
无法设置 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;
}
}
我以为设计师会为我创建列表。这样我就可以直接通过设计器添加项目。
这是我的组件的设计器代码:
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>();
以便我可以通过设计器添加项目,并且设计器添加如下代码:
this.menuBar1.StandardItems.Add(new StandardItem());
我是否缺少任何属性或某些内容?
您需要在自定义组件中创建项目,因为设计器不知道如何创建新的 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);
我正在 Winforms (C#) 中创建一个新组件。该组件获取一些属性来修改行为。用户应该将组件拉到他的表单上,设置一些属性并准备就绪。如果我想设置一个 属性 的通用 ComponentType(如 Form),没有问题。但是我得到了一个 BindingList<>()
属性,它不是由设计师生成的。
无法设置 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;
}
}
我以为设计师会为我创建列表。这样我就可以直接通过设计器添加项目。
这是我的组件的设计器代码:
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>();
以便我可以通过设计器添加项目,并且设计器添加如下代码:
this.menuBar1.StandardItems.Add(new StandardItem());
我是否缺少任何属性或某些内容?
您需要在自定义组件中创建项目,因为设计器不知道如何创建新的 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);