如何在用户控件 WinForm 中访问托管窗体上的控件

How to access controls on hosted form in a user control WinForm

在 visual studio 中,您如何访问承载用户控件的窗体上的控件?例如,当用户控件中的文本框中的文本发生变化时,我希望另一个用户控件中的另一个文本框中的文本发生变化。这两个用户控件都托管在同一个窗体上。提前致谢!

如果您需要不同的 UI 进行数据输入,我更喜欢使用 2 个具有不同 UI 的控件,但我将为它们使用单​​个数据源并使用数据绑定处理该场景.

如果您将两个控件绑定到一个数据源,虽然您可以有不同的 UI,但您有一个数据并且两个控件数据是同步的。

您问题的答案:

您可以在每个控件中定义一个属性,其中设置Text of TextBox。然后你可以处理 TextBoxTextChanged 事件,然后找到另一个控件并设置文本 属性:

控件1

public partial class MyControl1 : UserControl
{
    public MyControl1() { InitializeComponent(); }

    public string TextBox1Text
    {
        get { return this.textBox1.Text; }
        set { this.textBox1.Text = value; }
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if (Parent != null)
        {
            var control1 = Parent.Controls.OfType<MyControl2>().FirstOrDefault();
            if (control1 != null && control1.TextBox1Text != this.textBox1.Text)
                control1.TextBox1Text = this.textBox1.Text;
        }
    }
}

控制2

public partial class MyControl2 : UserControl
{
    public MyControl2() { InitializeComponent(); }

    public string TextBox1Text
    {
        get { return this.textBox1.Text; }
        set { this.textBox1.Text = value; }
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if (Parent != null)
        {
            var control1 = Parent.Controls.OfType<MyControl1>().FirstOrDefault();
            if (control1 != null)
                control1.TextBox1Text = this.textBox1.Text;
        }
    }
}