2016-04-27 70 views
1

假设我有两个文本框,一个保存二进制数据,另一个保存ASCII码。如果用户让我们说改变他们其中之一,我将如何在不需要按下按钮的情况下同时更新其他文本框?C#同时更新两个文本框?

+2

使用textchanged事件详细检查此链接https://msdn.microsoft.com/en-us/library/system.windows.forms.control.textchanged(v=vs.110).aspx – rashfmnb

+1

看看textchange事件你需要小心,以确保你没有发现自己在一个循环中改变一个COS另一个说它改变了,但它改变了COS你改变它 – BugFinder

+3

在两个文本框中的'textchanged'将创建一个无限循环 –

回答

3

你必须防止无限循环asciiTextBox改变binaryTextBox.Text从而改变asciiTextBox.Text等),并且可以实现类似的东西:

private void asciiTextBox_TextChanged(object sender, EventArgs e) { 
    binaryTextBox.TextChanged -= binaryTextBox_TextChanged; 

    try { 
    binaryTextBox.Text = BinaryText(asciiTextBox.Text); 
    } 
    finally { 
    binaryTextBox.TextChanged += binaryTextBox_TextChanged; 
    } 
} 

private void binaryTextBox_TextChanged(object sender, EventArgs e) { 
    asciiTextBox.TextChanged -= asciiTextBox_TextChanged; 

    try { 
    asciiTextBox.Text = AsciiText(binaryTextBox.Text); 
    } 
    finally { 
    asciiTextBox.TextChanged += asciiTextBox_TextChanged; 
    } 
} 
+1

非常详细的答案:) – rashfmnb

+0

嗯,我想我明白了。唯一我没有得到的是binaryTextBox.TextChanged - = binaryTextBox_TextChanged;这条线发生了什么?对不起,我是OOP的新手:p – Rafas

+1

当您使用两个“TextBox”控件的“TextChanged”事件来同步它们的文本时,没有无限循环。 'Text'属性检查,如果新值与之前的值相同,则不会引发'TextChanged'事件。 –

1

您正在使用TextChanged事件。当用户在一个文本框中键入时,您在TextChanged处理程序中处理它。

,以避免无限循环,可以从TextChange事件在开始退订,并在处理程序结束时再次订阅:

private void TextChangedHandler(object sender, EventArgs e) 
{ 
    textbox1.TextChanged -= TextChangedHandler; 
    textbox2.TextChanged -= TextChangedHandler; 

    // set textbox values 

    textbox1.TextChanged += TextChangedHandler; 
    textbox2.TextChanged += TextChangedHandler; 

} 
+0

textchanged在这两个文本框中将创建一个无限循环:我不是下来的选民 –

+0

我编辑了我的答案,谢谢@ un-lucky –

+0

@Roma当您使用两个TextBox控件的TextChanged事件时没有无限循环以同步它们的文本。 'Text'属性检查,如果新值与之前的值相同,则不会引发'TextChanged'事件。 –

1

使用TextChanged Event检查这个link查看详细

代码

private void TextBox_TextChanged(object sender, EventArgs e) 
{ 
// update your target text bx over here 
} 

创建TextChanged Event只为两个一箱箱将 创造无限的循环

+0

当您使用两个“TextBox”控件的“TextChanged”事件来同步它们的文本时,没有无限循环。 'Text'属性检查,如果新值与之前的值相同,则不会引发'TextChanged'事件。 –

2

当然,您不需要取消注册TextChanged事件并重新注册!

当您使用两个TextBox控件的TextChanged事件来同步它们的文本时,没有无限循环。 Text属性检查,如果新值与以前的值相同,则不会引发TextChanged事件。

所以你不需要删除处理程序。只需处理TextChanged事件并更新其他控件。

在下面的例子中,我有2 TextBox控制可以键入在两个和反向串将被显示在其它:使用上述图案

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    this.textBox2.Text = new string(this.textBox1.Text.Reverse().ToArray()); 
} 

private void textBox2_TextChanged(object sender, EventArgs e) 
{ 
    this.textBox1.Text = new string(this.textBox2.Text.Reverse().ToArray()); 
} 

可以简单地使用您的MakeBinaryMakeAscci方法。你应该只有可逆的方法。