这是我的自定义控件类:
// 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)]
可以解决问题。
答案 0 :(得分:1)
我写了一篇关于如何创建自定义UserControl并访问其成员here的迷你小说。实际上,您似乎希望向ExtComboBox
添加属性,以显示您想要更改的ComboBox
属性。然后,在ExtButton
中,您将能够使用.
在运行时更改这些值。
此外,而不是:
public ExtComboBox ComboBoxInsideButton { get; set; }
...
ComboBoxInsideButton = new ExtComboBox();
DO
public ExtComboBox comboBoxInsideButton = null;
...
comboBoxInsideButton = new ExtComboBox();
请务必了解private
和public
之间的区别。如果您将ExtComboBox
放在另一个控件上,我不确定您是否希望public
成为{{1}}。
希望这有帮助。