2014-04-20 147 views
2

如果我在窗體上有兩個文本框,我該如何使它們的文本屬性完全同步?類似於如果他們都處理相同的KeyDown事件會發生什麼。如何同步兩個TextBox控件的文本屬性?

+0

爲了澄清,您是否希望能夠鍵入到任一文本框中,或者只是一個,並讓另一個文本複製文本? – DeanOC

+0

@DeanOC我希望能夠輸入到 – test

回答

2

我會做這種方式:

 textBox1.TextChanged += (s, _) => 
     { 
      if (!textBox2.Focused && textBox1.Text != textBox2.Text) 
      { 
       textBox2.Text = textBox1.Text; 
      } 
     }; 

     textBox2.TextChanged += (s, _) => 
     { 
      if (!textBox1.Focused && textBox2.Text != textBox1.Text) 
      { 
       textBox1.Text = textBox2.Text; 
      } 
     }; 

基本上我響應TextChanged甚至每個文本框,但要確保目標文本框沒有焦點,並且文字實際上已經改變。這可以防止無限的前後循環嘗試更新文本,並確保當前插入點不被覆蓋的文本所改變。

+0

非常好的解決方案。據我所知,完美地工作。 – DeanOC

1

我會說你部分回答了你自己的問題,讓他們都被分配到相同的TextChanged EventHandler檢查哪個文本框已經改變,然後更新另一個文本屬性,像這樣。

private void textBox_TextChanged(object sender, EventArgs e) 
{ 
    if (((TextBox)sender).Equals(textBox1)) 
     textBox2.Text = ((TextBox)sender).Text; 
    else 
     textBox1.Text = ((TextBox)sender).Text; 
} 

修改代碼,以克拉位置同步的兩個文本框的之間,看看這是你想要的東西。

private void textBox_TextChanged(object sender, EventArgs e) 
{ 
    TextBox tb = (TextBox)sender; 
    if (tb.Equals(textBox1)) 
    { 
     if (textBox2.Text != tb.Text) 
     { 
      textBox2.Text = tb.Text; 
      textBox2.SelectionStart = tb.SelectionStart; 
      textBox2.Focus(); 
     } 
    } 
    else 
    { 
     if (textBox1.Text != tb.Text) 
     { 
      textBox1.Text = tb.Text; 
      textBox1.SelectionStart = tb.SelectionStart; 
      textBox1.Focus(); 
     } 
    } 
} 
+0

這將使脫字符位置不同步,雖然 – test

+0

你想要做什麼,你需要兩個完全相同的克拉位置,插入位置在你輸入的文本框中將是正確的,文本框將具有完全相同的文本。 –

+0

因爲我最終會做的事情是,當用戶鍵入第一個文本框時,它將選擇第二個文本框,並且插入符的位置應該位於同一個位置。 – test