如何同步两个TextBox控件的Text属性?

时间:2014-04-20 02:07:35

标签: c# winforms textbox

如果我在表单上有两个文本框,我怎样才能使它们的文本属性完全同步?类似于它们都处理相同的KeyDown事件时会发生的情况。

3 个答案:

答案 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;
}