使用无输入控件更新文本框

3
我有一个Windows表单应用程序,其中包含一堆控件,但更具体来说,有两个textBoxes。其中一个是只读的。textBox 的只读值应该与用户可以键入的textBox 的值相同。
因此,如果用户在textBox A中键入“Hello World”,则textBox B中的值应自动更新为“Hello World”。
如何去做?我知道我只需要设定文本值,但我不确定在哪里放置代码以便在自动完成而不是执行按钮点击或类似操作时进行。

3
Windows表单应用程序?我不明白jQuery与此有什么关系? - Ari
我不明白你的问题与“Windows Form”有什么关系。 - H H
@HenkHolterman: "我有一个表单应用程序"是一个提示,尽管我同意它本可以更清晰明了。 - Jon Skeet
@HenkHolterman:这就是为什么我只说它是一个提示 :) 我认为大多数人会特别提到“Web”部分的Web表单应用程序,而不仅仅是将其称为“表单应用程序”。 - Jon Skeet
5个回答

6

TextChanged事件:

private void textBox1_TextChanged(object sender, EventArgs e)
        {
            textBox2.Text = textBox1.Text;
        }

2
另外,不要忘记将事件注册到您的 textBox - Otiel

5

听起来你想要类似这样的东西:

writableTextBox.TextChanged += delegate {
    readonlyTextBox.Text = writableTextBox.Text;
};

换言之,每当一个文本框中的文本发生改变时,更新另一个文本框。这使用Control.TextChanged事件。

不错的一行解决方案。但对于_happyguy_来说理解事件可能并不是最简单的 :) - Otiel
@Leito:你是在假设这位问题提问者不知道事件的吗? - Jon Skeet
我确实假设是这样的。TextChanged 是我在学习事件时遇到的第一个事件 - 似乎很合理。但我可能错了 :) - Otiel
@Leito:我觉得这并不是那么核心的事件。如果楼主问的是当按钮被点击时如何反应,那会更明显一些,我觉得 :) - Jon Skeet

2
这应该能满足您的需求:
private void textBox1_TextChanged(object sender, EventArgs e)
{
textBox2.Text = textBox1.Text;
}

2
如果您希望在用户按下textBoxA中的键后立即更新textBoxB的文本(即立即更新),则事件为TextChanged:
    this.textBoxA.TextChanged += new System.EventHandler(this.textBoxA_TextChanged);

    private void textBoxA_TextChanged(object sender, EventArgs e)
    {
        textBoxB.Text = textBoxA.Text;
    }

如果您希望在用户完成编辑textBoxA后才更新textBoxB中的文本,您应该使用Leave事件:

    this.textBoxA.Leave += new System.EventHandler(this.textBoxA_Leave);

    private void textBoxA_Leave(object sender, EventArgs e)
    {
        textBoxB.Text = textBoxA.Text;
    }

1
比事件方法更短(更好?)的方法是使用winform的数据绑定。只需在InitializeComponents调用之后使用以下代码即可:
readonlyTextBox.DataBindings.Add("Text", writableTextBox, "Text");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接