如何从父项以外的表单更新TextBox?

时间:2009-09-08 05:53:50

标签: c# winforms

我想从任意形式更新TextBox。你能建议一个这样做的方法吗?

3 个答案:

答案 0 :(得分:3)

基本上与你对另一个对象做任何事情的方式相同。您需要引用另一个表单,如果它是一个不同的类型,它必须将您感兴趣的文本框作为属性公开,或者有一个方法来设置文本。例如,你可能有:

public class FirstForm : Form
{
    private TextBox nameInput;
    public TextBox NameInput { get { return nameInput; } }

    ...
}

public class SecondForm : Form
{
    private TextBox otherNameInput;
    private FirstForm firstForm;

    public void CopyValue()
    {
        firstForm.NameInput.Text = otherNameInput.Text;
    }
}

或者将文本框的责任放在第一种形式:

public class FirstForm : Form
{
    private TextBox nameInput;
    public string Name
    { 
        get { return nameInput.Text; } 
        set { nameInput.Text = value; }
    }

    ...
}

public class SecondForm : Form
{
    private TextBox otherNameInput;
    private FirstForm firstForm;

    public void CopyValue()
    {
        firstForm.Name = otherNameInput.Text;
    }
}

还有其他各种方法可以给猫皮肤,但这些是最常见的。如何将FirstForm引用到SecondForm中会有所不同 - 它可能会传递到SecondForm的构造函数中,也可能由SecondForm本身创建。这将取决于您的其他UI。

请注意,这假设两个表单使用相同的UI线程。为不同的窗口设置不同的UI线程是可能的(但相对不常见),在这种情况下,您需要使用Control.Invoke / BeginInvoke

答案 1 :(得分:0)

更改类并覆盖表单的构造函数以传入所需的数据。在构造函数存储中,传入的varialble传入成员变量

答案 2 :(得分:0)

你应该听取Jon的建议。另一种方式可能就像这样脏:

// Bad practice
foreach (var child in theOtherForm.Controls){
    if(child.Name == '_otherControlName')
    {
        (child as TextBox).Text = _thisTextBox.text;
    }
}

您可能还需要检查某些类型和某些面板的子控件。