如果我在表单上有两个文本框,我怎样才能使它们的文本属性完全同步?类似于它们都处理相同的KeyDown事件时会发生的情况。
答案 0 :(得分: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
,但确保目标文本框没有焦点并且文本实际上已经更改。这可以防止无限的来回循环尝试更新文本,并确保当前插入点不会被覆盖的文本更改。
答案 1 :(得分:1)
我会说你已经部分回答了你自己的问题,让他们都分配给同一个TextChanged
EventHandler检查哪个文本框已更改然后更新另一个文本框的Text属性,就像这样。
private void textBox_TextChanged(object sender, EventArgs e)
{
if (((TextBox)sender).Equals(textBox1))
textBox2.Text = ((TextBox)sender).Text;
else
textBox1.Text = ((TextBox)sender).Text;
}
保持克拉位置的修改代码在两个TextBox之间同步,看看这是否是您想要的。
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();
}
}
}
答案 2 :(得分:0)
我将简单地执行以下操作:
bool flag1, flag2;
private void t1_TextChanged(object sender, EventArgs e)
{
if (flag2) return;
flag1 = true;
t2.Text = t1.Text;
flag1 = false;
}
private void t2_TextChanged(object sender, EventArgs e)
{
if (flag1) return;
flag2 = true;
t1.Text = t2.Text;
flag2 = false;
}