在winforms中从其他形式访问公共财产

时间:2013-06-04 11:23:34

标签: c# winforms

例如,我有Form1和Form2。 Form1具有公共财产

 public IMyCustomType selectedOption;

Form1内,comboBox有自定义对象列表。我想当用户从该组合列表中选择选项到selectedOption时填充该值,如

public IMyCustomType selectedOption;

private void availableChoices_SelectedIndexChanged(object sender, EventArgs e)
{             
   selectedOption = (IMyCustomType)availableChoices.SelectedItem;                                        
}

内部Form2我想创建所选类型的新实例。如何从form2访问selectedOption属性并使用该值创建新实例?

4 个答案:

答案 0 :(得分:3)

如果从form1显示form2,则可以使用owner参数:

form2.Show(form1);

然后在form2中,您可以从所有者属性中获取它:

((Form1)this.Owner).selectedOption

或者你也可以在form2中使用公共方法,它会接受所选的选项作为参数,并在显示form2之前调用它。

public class Form2 : Form {
  private IMyCustomType parentSelectedOption;
  ...
  public void InitParameters(IMyCustomType selectedOption) 
  {
      parentSelectedOption = selectedOption;
  }
}

public class Form1 : Form {
     ....
     var form2 = new Form2();
     form2.InitParameters(selectedOption);
     form2.Show();
}

但请注意,公共属性(在您的情况下是字段)通常使用CamelCase命名。

答案 1 :(得分:1)

我知道的最佳实践是拥有一个控制程序形式的控制器类,然后可以在创建时将状态对象的引用传递给表单,并从该状态对象访问所需的任何属性。

(这也有助于你做一些巧妙的技巧,比如设置下一个表格从你当前的表单中加载;你的控制器类可以很容易地选择它然后调用等等。)

答案 2 :(得分:0)

请提供更多详情,我会在回答中添加。这取决于您如何创建Form2。一种简单的方法是将IMyCustomType selectedOption放在form2的默认构造函数中,并通过Form2的构造函数将selectedOption从Form1传递给Form2。

答案 3 :(得分:-1)

组合框属性窗口将具有private的成员可见性。将其设置为内部或公共。