3

我创建了这个用户控件:

在此处输入图像描述

我将该用户控件添加到主窗体,现在我想自定义它。所以我必须向这 3 个按钮添加文本、标签中的文本、填充列表框并为按钮设置单击事件。

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

我在网上环顾四周,显然这样做的方法是在用户控件中添加公共属性,这将公开我需要的单个控件属性。

就像是:

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

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

但是像这样在用户控件中公开整个控件不是更容易吗?

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

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

4

3 回答 3

3

从封装的角度来看,第一种方法更好。第二种方法使您的控件的用户(窗体)依赖于您的控件的视图,这可以防止将来更改视图。

于 2012-04-29T08:02:04.240 回答
2

代码的第一位是正确的方法。您将不得不创建很多它们,但这是正确的方法。

于 2012-04-29T07:53:47.143 回答
1

第一个要好得多,您只需为希望能够从父控件访问的按钮的每个单独属性创建属性。

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

于 2012-04-30T15:47:00.440 回答