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

相關問題