假设我有两个文本框,一个包含二进制数据,另一个包含ASCII等效文本框。如果用户让我们说改变其中一个,那么如何同时更新另一个文本框,而不必按一个按钮?
答案 0 :(得分: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 :(得分:2)
当然,您不需要取消注册TextChanged
事件并重新注册!
当您使用两个TextChanged
控件的TextBox
事件来同步它们的文本时,没有无限循环。 Text
属性检查,如果新值与先前值相同,则不会引发TextChanged
事件。
所以你不需要删除处理程序。只需处理TextChanged
事件并更新其他控件。
在下面的示例中,我有两个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());
}
使用上述模式,您只需使用MakeBinary
和MakeAscci
方法即可。你应该只有可逆的方法。
答案 2 :(得分:1)
你辱骂使用TextChanged
事件。当用户在一个文本框中键入时,您可以在TextChange
处理程序中处理它。
为避免无限循环,您可以在开头取消订阅private void TextChangedHandler(object sender, EventArgs e)
{
textbox1.TextChanged -= TextChangedHandler;
textbox2.TextChanged -= TextChangedHandler;
// set textbox values
textbox1.TextChanged += TextChangedHandler;
textbox2.TextChanged += TextChangedHandler;
}
事件,并在处理程序结束时再次订阅:
when State=={Wait for Reply} && comments.added !=null
&& comments.added.isNotEmpty && comments.added.last !=null
&& !comments.added.last.author.isInGroup("Internal Developers"){
State={Open};
}
答案 3 :(得分:1)
使用TextChanged Event
查看此link了解详情
码
private void TextBox_TextChanged(object sender, EventArgs e)
{
// update your target text bx over here
}
仅为两个框创建
TextChanged Event
创造无限循环