UserControl似乎没有使用SET

时间:2014-03-01 00:27:14

标签: c# custom-controls

我现在已经和我一起玩了几个小时了,我只是在圈子里跑来跑去,增加了我的沮丧程度。

我有一个相当直接的用户控件,在这个控件上是一个标签和一个组合框。我已经公开了用于更改关卡文本的公共属性,并为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"));

但是,在运行时,下拉列表中不会显示任何项目。

1 个答案:

答案 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);
}