我现在已经和我一起玩了几个小时了,我只是在圈子里跑来跑去,增加了我的沮丧程度。
我有一个相当直接的用户控件,在这个控件上是一个标签和一个组合框。我已经公开了用于更改关卡文本的公共属性,并为DropDownItems创建了一个GET / SET。
包含我的组合框项目的列表声明如下:
private List<DropdownItemObject> _dropDownItems = new List<DropdownItemObject>();
此类是添加到组合框的项目。
public class DropdownItemObject
{
public DropdownItemObject()
{
Tag = null;
Object = null;
}
public DropdownItemObject(string text, object _object = null, object tag = null)
{
Text = text;
Object = _object;
Tag = tag;
}
public object Tag { get; set; }
public object Object { get; set; }
public string Text { get; set; }
}
这是UserControl中的公开属性。用户控件上的组合框称为“comboPrimary”。
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Editor(typeof (CollectionEditor), typeof (UITypeEditor))]
public List<DropdownItemObject> DropDownItems
{
get
{
return _dropDownItems;
}
set
{
_dropDownItems = value;
comboPrimary.Items.Clear();
foreach (DropdownItemObject item in _dropDownItems)
{
comboPrimary.Items.Add(item);
}
}
}
将此控件添加到表单后,我可以使用“集合编辑器”添加下拉项。或者我可以用这个编程:
uc1.DropDownItems.Add(new DropdownItemObject("ITEM 998"));
但是,在运行时,下拉列表中不会显示任何项目。
答案 0 :(得分:0)
DropDownItems.Add
未调用DropDownItems
二传手。您没有设置属性的值,只是在其当前值上调用方法。
您需要说出类似
的内容uc1.DropDownItems = new List<DropdownItemObject>() {
new DropdownItemObject("ITEM 998") };
以便调用setter代码。
您还可以在UserControl类上公开自己的Add
方法,然后再调用comboPrimary.Items.Add
。
public void Add(DropdownItemObject item) {
comboPrimary.Items.Add(item);
}