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

例如,我有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属性并使用该值创建新实例?

如果从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命名。

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

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

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

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