在Winform中访问用户控件的控件属性的正确方法是什么?

时间:2012-04-29 07:44:42

标签: c# .net winforms user-controls

我创建了这个用户控件:

enter image description here

我将用户控件添加到主窗体,现在我想自定义它。 因此,我必须为这些3个按钮添加文本,在Label中添加文本,填充ListBox并为按钮设置C​​lick Events。

这样做的正确方法是什么?

我环顾网络,显然这样做的方法是在用户控件中添加公共属性,这将暴露我需要的控件的各个属性。

类似的东西:

    public string Button1Text
    {
        get
        {
            return btn1.Text;
        }
        set
        {
            btn1.Text = value;
        }
    }

如果我走这条路线,我将不得不为这个简单的用户控件添加相当多的公共属性。

但是这样在用户控件中暴露整个控件是不是更容易?

    public Button MyButton1
    {
        get { return this.btn1; }
        set { this.btn1 = value; }
    }

这样,主表单可以根据需要简单地访问控件及其属性。

3 个答案:

答案 0 :(得分:3)

从封装的角度来看,第一种方法更好。第二种方法会导致控件的用户(表单)依赖于控件的视图,这样可以防止将来更改视图。

答案 1 :(得分:2)

代码的第一位是正确的方法。你必须创建很多它们,但这是正确的方法。

答案 2 :(得分:1)

第一个更好的地方是,您只能为希望能够从Parent控件访问的按钮的每个单独属性创建属性。

如果您使用第二种方式,那么任何希望使用您的控件的人都可以移动并调整控件内的各个控件的大小。然后它真的不再是一个自定义控件,而是一个比面板更难使用的面板。我想不出为什么能够允许Parent在子控件中移动各个元素的任何理由。