访问其他表单的组件

时间:2017-01-31 12:57:49

标签: c# .net forms winforms

我的申请表中有两个FormsForm包含以下字段:txtPowertxtTensiontxtCurrent。我想通过另一个TextBox访问这些Form中填写的值。在第二个Form中,我实例化了第一个object(MotorForm)的Form,但我无法访问TextBox

public MacroForm()
{
    InitializeComponent();

    MotorForm motorForm = new MotorForm();
    motorForm.Show();
}

有什么办法吗?

2 个答案:

答案 0 :(得分:1)

请不要在表单中公开控件。决不。 (除非你有充分的理由。)

如果问题很简单在你的程序中使用MVVM(或类似程序)(你应该考虑每个程序都很简单),你应该公开值< / em>通过属性实例化的表单。认为

public string Power
{
   get { return txtPower.Text; }
   set 
   { 
       if(ValidatePower(value))
       {
           txtPower.Text = value;
       }
       else
       {
           // throw ??
       }
    }
}

如果我们可以对值的类型做出明智的假设,我们可以将其扩展到

public double Power
{
    get
    {
        // parse the value
        // validate the value
        // throw if not valid ??
        // return the value
    }
    set
    {
        // validate the value
        // set the value in the text box
    }
}

如果您公开了txtPower对象,那么您将使实例化类依赖于实例化类的实现细节,这实际上永远是一件好事。

答案 1 :(得分:0)

似乎您的问题是使用ShowDialog打开表单的完美情况。

要完成此操作,您需要更改要在Modifiers上访问的控件的MotorForm属性,并将其设置为Public。并且还将表单的DialogResult属性设置为所需的值,即OK。无论如何,更简单的方法是将它设置在应该关闭表单的按钮上。假设OK或CANCEL按钮。

然后您可以这样创建表单:

MotorForm motorForm = new MotorForm();
if(motorForm.ShowDialog() == DialogResult.OK)
{
     string myValue = motorForm.txtPower.Text; //you can access your values this way
}