在控制中初始化控制

时间:2012-08-29 16:28:42

标签: c# visual-studio-2010 controls

这是我的自定义控件类:

// Extended ComboBox where ill change some property.
public class ExtComboBox : ComboBox
{
    ...
}

// ExtButton is a control that i am going to drop on Form from ToolBox.
public partial class ExtButton : Button
{
    public ExtComboBox ComboBoxInsideButton { get; set; }

    public ExtButton()
    {
        InitializeComponent();


        ComboBoxInsideButton = new ExtComboBox();
        ComboBoxInsideButton.Text = "hi!";

        Controls.Add(ComboBoxInsideButton);
    }
}

基本上,当我将此控件添加到窗体时,将在顶部关闭按钮上的ComboBox。 不要问我为什么需要这个:D

现在,如果我需要更改ComboBox文本,我只需使用:

extButton1.ComboBoxInsideButton.Text = "aaa";

当我尝试在设计模式下更改某些ComboBox属性时,所有工作正常...但是:)(窗口属性 - >展开ComboBoxInsideButton - >将文本更改为“bbb”) 重建或运行项目后,将重置ComboBox属性(ExtButton.Designer.cs)

问题1:如何使用某些默认属性值初始化子控件,因此当表单上的所有设置都会添加错误控件时会添加?

问题2:如何在设计时更改子控件的属性。

修改
在这里回答:Designer does not generate code for a property of a subcontrol. Why?
添加[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]可以解决问题。

1 个答案:

答案 0 :(得分:1)

我写了一篇关于如何创建自定义UserControl并访问其成员here的迷你小说。实际上,您似乎希望向ExtComboBox添加属性,以显示您想要更改的ComboBox属性。然后,在ExtButton中,您将能够使用.在运行时更改这些值。

此外,而不是:

public ExtComboBox ComboBoxInsideButton { get; set; }
...
ComboBoxInsideButton = new ExtComboBox();

DO

public ExtComboBox comboBoxInsideButton = null;
...
comboBoxInsideButton = new ExtComboBox();

请务必了解privatepublic之间的区别。如果您将ExtComboBox放在另一个控件上,我不确定您是否希望public成为{{1}}。

希望这有帮助。