4

在Visual Studio中,如何访问托管用户控件的窗体上的控件?例如,当用户控件中的文本框中的文本更改时,我希望更改另一个用户控件中另一个文本框中的文本。这两个用户控件都托管在同一个表单上。提前致谢!如何在用户控件上访问托管窗体上的控件WinForm

+1

从您的用户控件引发一个事件,请通过表格或其他UC订阅该活动。提出问题*如果他们密切相关,为什么他们在不同的控制?* – Plutonix

+0

你能更具体吗?为什么在设计时需要在两个控件之间进行这种整合? –

+0

Plutonix,它们在单独的控件上,因为用户可以决定要在窗体上显示哪个用户控件。它可以是一个或两个。如果两者都同时显示,则文本需要匹配。 – Zach

回答

1

如果您需要不同的用户界面进行数据输入,我更喜欢使用不同用户界面的2个控件,但是我将为它们使用单​​个数据源并使用数据绑定来处理场景。

如果将两个控件绑定到单个数据源,而您可以拥有不同的UI,则您只有一个数据,并且两个控件数据都是同步的。

的回答你的问题:

您可以在其中设置的TextBoxText每个控件定义的属性。然后你就可以处理TextChanged事件TextBox,然后找到其他控制和设置text属性:

控制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; 
     } 
    } 
} 
+0

非常感谢!完美的作品。 – Zach

相关问题