2015-10-06 52 views
1

enter image description here编辑控件 - C#的WinForms

我试图改变自定义控件的文本框的背景颜色(定制控件的名称是“TC1”和文本框的名字是“txtb”)通过单击不在自定义控件中的“更改”按钮。我应该如何解决这个问题?

感谢, 韦恩Scicluna

+0

如果您对自定义控件的源代码有控制权,请为其提供公共属性以更改该颜色,因为它可以访问其子控件。 –

回答

1

选项1:

你可以让你TextBox公开。要这样做,请转到您的用户控件的设计器,然后选择Modifier属性并将该值设置为公共。

现在你可以在你的控制之外访问它。例如,如果您有与userControl1和名称的文本框的用户控件的一个实例是txtb

userControl1.txtb.BackColor = Color.Red; 

选项2:

作为另一个选项,您可以创建一个公共财产,在该属性获取或设置您的文本框的颜色。

public Color TextBoxBackColor 
{ 
    get 
    { 
     return txtb.BackColor; 
    } 
    set 
    { 
     txtb.BackColor = value; 
    } 
} 

现在您可以在您的控制之外访问此属性。例如,如果您有与userControl1名用户控件的实例:

userControl1.TextBoxBackColor = Color.Red; 
+1

使TextBox公开中断封装。最好在自定义控件上提供一个新的属性。 –

+0

@EricJ。总的来说,我同意你的看法,但有时候你有一些权衡,你更愿意公开控制权。 –

+0

所以通过暴露控制我基本上可以编辑该控件的所有属性。我对吗? –

1

既然你正在建设一个用户控制,改变文本框的颜色可以被视为控制的功能,并可以提供通过添加一个属性给客户。

[Browsable(true)] // allows you to change it in the designer 
public Color TextBoxBackColor 
{ 
    get { return txtb.BackColor; } 
    set { txtb.BackColor = value; } 
} 
+0

默认情况下,该公共属性是'Browsable'。 –