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

C# 在Winform中访问用户控件属性的正确方法是什么?,c#,.net,winforms,user-controls,C#,.net,Winforms,User Controls,我创建了此用户控件: 我将该用户控件添加到主窗体中,现在我想对其进行自定义。 因此,我必须向这3个按钮添加文本,标签中的文本,填充列表框,并为按钮设置单击事件 正确的方法是什么 我环顾了一下web,很明显,这样做的方法是在用户控件中添加公共属性,以公开我需要的控件的单个属性 比如: public string Button1Text { get { return btn1.Text; } s

我创建了此用户控件:

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

正确的方法是什么

我环顾了一下web,很明显,这样做的方法是在用户控件中添加公共属性,以公开我需要的控件的单个属性

比如:

    public string Button1Text
    {
        get
        {
            return btn1.Text;
        }
        set
        {
            btn1.Text = value;
        }
    }
如果我这样做,我将不得不向这个简单的用户控件添加许多公共属性

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

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

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

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

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

第一种方法更好,只为希望从父控件访问的按钮的每个单独属性创建属性


如果使用第二种方法,则希望使用控件的任何人都可以移动控件内的单个控件并调整其大小。然后,它实际上不再是一个自定义控件,而是一个比面板更难使用的面板。我想不出有什么理由允许父控件在子控件中的各个元素之间移动。

但是如何处理比简单文本框更复杂的列表框呢?它有许多属性,我也想访问,如数据源、DisplayMember、Items、SelectedIndex、SelectedItem、SelectedItems、SelectedValue等等,。。。我是否要公开每个属性?如果是这样的话,那么这与第二种方法有什么不同?在这两种情况下,表单都绑定到ListBox。或者我应该采用不同的封装方式吗?我认为以这种方式导出属性的次数越多,创建依赖项的次数就越多。试着抽象一下。此外,我建议您学习WPF并遵循MVVM指令。我创建了有问题的用户控件,因为我在应用程序中的几个位置需要这些控件组,所以创建空白用户控件并使主窗体能够访问其子控件对我来说是有意义的。