更新不使用输入控件的文本框

本文关键字:文本 控件 输入 更新 | 更新日期: 2023-09-27 18:11:32

我有一个windows窗体应用程序,它由一堆控件组成,但更具体地说,两个textBoxes。其中一个是只读的。只读的textBox值应该与用户可以输入的textBox值相同。

因此,如果用户在textBox A中输入"Hello World",则textBox B中的值应自动更新为"Hello World"。

我该怎么做呢?我知道我只需要设置文本值,我只是不确定在哪里放置代码来自动完成它,而不是在单击按钮或沿着这些行执行。

更新不使用输入控件的文本框

TextChanged event:

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

听起来你想要这样做:

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

换句话说,当一个文本框中的文本发生变化时,更新另一个文本框。这使用Control.TextChanged事件。

如果您希望textBoxB在textBoxA的文本更改后立即更新(即在用户按下textBoxA中的键后立即更新),则事件为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;
    }

这应该可以满足您的需求:

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

比事件方法更短(更好?)的是使用winform的数据绑定。在InitializeComponents调用之后使用:

readonlyTextBox.DataBindings.Add("Text", writableTextBox, "Text");