问题  我有一个关于设置用户控件属性和属性浏览器设置的问题。

z_idea

新成员
已加入
2012年12月27日
留言内容
4
编程经验
3-5
你好..

抱歉,无法体验英语。

无论如何,我创建了一个UserControl,以TLabelCombo命名。

和TLabelCombo都具有Property ..类似代码。
--------------------------------------------------
TLabelCombo类:UserControl
{
公共控件NextControl {get; set;}
}
--------------------------------------------------

然后我将TLabelCombo添加到了Visual Studio(2010,.net4)的设计器模式窗体中。

和我用VisualStudio属性浏览器观看TLabelCombo的属性NextControl

我可以在窗体的控件中选择NextControl的值。

但是我必须在列表上创建NextControl。

--------------------------------------------------
TLabelCombo类:UserControl
{
public List<Control>NextControls {get; set;}
}
--------------------------------------------------

将构建TLabelCombo,然后再次观看属性浏览器。
属性浏览器中的NextControls属性将从ComboBox更改为Container Editor。
我单击“容器编辑器”。该容器编辑器用于向NextControls添加多控件。
但是这时出现了一个问题。我无处找不到Form的子控件。
才能够添加新控件并添加新控件。

我想将TLabelCombo父表单中的控件添加到带有属性浏览器的NextControls中...
感谢您阅读。
 
Last edited:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,524
地点
悉尼,澳大利亚
编程经验
10+
首先,您不应该这样声明您的财产。当您拥有的属性是集合类型时,应按以下方式进行定义:
public class LabelCombo : UserControl
{
    private List<Control> _nextControls = new List<Control>();

    public List<Control> NextControls
    {
        get
        {
            return _nextControls;
        }
    }
}
现在,您可以添加和删除现有列表中的项目,但是不能将列表替换为另一个列表,并且不能将其设置为null。基本上,这就是所有集合属性在.NET中的工作方式。

至于问题,您将必须构建自己的UITypeEditor,这并非易事。

UITypeEditor类(System.Drawing.Design)

您可能可以从现有的集合编辑器开始并添加自己的自定义逻辑。

CollectionEditor类(System.ComponentModel.Design)
 

z_idea

新成员
已加入
2012年12月27日
留言内容
4
编程经验
3-5
亲爱的 金西尼

谢谢你的建议.. !!  :)

我尝试了一下,并获得了自定义逻辑集合编辑器,并获得了成功。

但是它没有附加在Designer.cs中。

因此,当关闭DesignMode窗口时,我正在保存Data Disapper  :(

我该如何解决?
 
最佳 底部