2016-01-06 123 views
-1

我希望将每个文本框添加到我的一个表单中,使其看起来相同并具有相同的属性。例如,我给文本框,我也想要这个按钮和组合框。我的问题是如何为每个控件定义一组默认属性。 我可以做到这些形式吗?如何定义默认控件属性?

+1

您可以创建自定义控件,该控件不会更改任何内容,但不会更改默认值。例如。 'MyButton:Button'在构造函数中用你的默认值覆盖。 – Sinatr

回答

2

创建每个控件的自定义类。例如,如果你想要文本框中说“你好世界”,你会用这个。

public class NewTextBox : TextBox 
{ 
    //The constructor, called for every new instance of the class. 
    public NewTextBox() 
    { 
     Text = "hello world"; 
    } 
} 

然后在窗体中使用这个函数,你可以像这样调用一个新的实例。

NewTextBox tb = new NewTextBox();//Create new text box 
Controls.Add(tb);//Add text box to form. 
+0

好的谢谢!另一个问题,当我以这种方式使用它时,我会在设计器中看到它吗? –

+0

您将在Visual Studio中的Control Toolbox中看到它,并且您可以拖放到窗体和控件 – Andez

+0

有时它们不会自动出现在设计器中,发生这种情况时,请在窗体的构造器中创建该类的实例(public Form1 ()....等),然后运行该程序。现在您将看到工具箱中的控件,并且您可以从设计器中删除该实例。 – Rariolu

2

一种解决方案是通过继承基本控件并使用DefaultValue属性装饰属性来创建自己的控件库。例如:

public class MyTextBox: TextBox 
{ 
    public MyTextBox() 
    { 
    Text = "Hi"; 
    } 

    [DefaultValue("Hi")] 
    public new string Text 
    { 
    get 
    { 
     return base.Text; 
    } 
    set 
    { 
     base.Text = value; 
    } 

} 

使用new关键字是因为该属性被重新定义。

+1

这是设计师默认值的一个好主意。您仍然需要在某处设置默认值。例如。在构造函数'Text =“Hi”;'中。 – Sinatr

+0

@Sinatr:你说得对,谢谢,我已经更新了答案。 –

+0

+1用于提供默认值属性。但是隐藏“Text”属性不是一个好主意。大多数属性都是专门用于重写和应用不同属性的虚拟属性。正确的答案是'[DefaultValue(“Hi”)] public override string Text ...'。 –