如果我在表单上有两个文本框,如何使它们的文本属性完美同步? 如果它们都处理相同的KeyDown事件,将会发生类似的情况。

===============>>#1 票数: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做出响应,但要确保目标文本框没有焦点并且文本实际上已更改。 这样可以防止无限次来回循环尝试更新文本,并且可以确保当前的插入点不会因被覆盖的文本而改变。

===============>>#2 票数: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();
        }
    }
}

===============>>#3 票数: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;
}

  ask by test translate from so

未解决问题?本站智能推荐:

2回复

清除两个文本框文本,或者选择一个

我有一个Windows窗体的文本框,我有清除按钮,它基本上清除char的文本char(这是一个一个不是一次全部),我的问题是我想添加另一个文本框到这个窗体,并希望控制两个带有清除按钮的文本框意味着清除应该只清除我选择或点击的文本框,我尝试这样做,但要么我能够同时清除两个文本框,要么只清除文本框我
3回复

还有其他方法可以将文本追加到Textbox控件吗?

我有一个写入System.Windows.Forms.TextBox的自定义日志记录框架。 我现在写到TextBox的方式是这样的: 这种方法的问题在于,每次执行此命令时,tbLog.Text和newLogEntry.Text中的字符串将被串联,然后分配给tbLog.Text。 随着
4回复

检查两个文本框

我正在使用C#(visual studio)更改密码窗体应用程序。 这是我的应用程序的工作方式,在用户输入新密码并通过文本框验证后, 新密码文本框旁会显示勾号。 我面临的问题是如何检查重新输入的密码是否与输入的新密码相同? 在检查它们是否相同之后,勾选将显示向用户显示它被检查并且相同。
5回复

如何在文本框的Text属性中添加一行?

我在Windows窗体应用程序中有TextBox 。 然后在其中写一个文本。 例如。 当我写第二个文本时,第一行被删除。 如何离开第一行并在TextBox下一行中写入下一个文本? 我想要以下结果:
2回复

将字符串分配给表单上的TextBox.Text属性会导致NullReferenceException

使用以下代码(listApplications是一个ListView控件): ...我得到了“未处理System.NullReferenceException Message =对象引用未设置为对象实例的情况。” 逐步执行炸弹的路线是: textBoxFullPath是表单
1回复

在TextBox控件中创建超链接

有没有办法在Textbox控件中创建超链接? 问题:我希望只有某些文本可以作为超链接。 例如,StackOverflow.com允许我仅将此文本作为超链接。 有没有办法在C#中使用Textbox执行此操作?
5回复

如何同步两个多行文本框的滚动?

如何在C#(WinForms)中同步两个多行文本框的滚动? 在TextBox A中向上/向下滚动一行时,TextBox B也应向上/向下滚动。 反过来相反。 没有自定义控件,这是否可以实现?
1回复

无法将文本粘贴到TextBox

我在将数据粘贴到textBox时遇到问题。 我想解析输入的文本以替换所有newLines,但是当我尝试粘贴一些文本时,我们说: 1234 5678 9000 我只得到第一行。 有什么简单的方法还是我必须以某种方式覆盖ctrl + v快捷方式并解析我试图输入的内容?
3回复

继承的TextBox缺少CaretIndex属性

我有以下代码: 我收到错误: 'MyTextBoxes.myTextBox'不包含'CaretIndex'的定义,也没有扩展方法'CaretIndex'... 即使CaretIndex是TextBox属性: http : //msdn.microsoft.com/en-us/
5回复

验证TextBox中的文本更改

我已经在我的WinForm中的textBox上实现了验证规则,它运行良好。 但是,只有当我跳出字段时,它才会检查验证。 我希望只要在框中输入任何内容并且每次内容发生变化时都要检查。 我还想在WinForm打开后立即检查验证。 我记得最近通过设置一些事件和诸如此类的事情来做这件事,但我