例如,我有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
属性并使用该值创建新实例?
答案 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的成员可见性。将其设置为内部或公共。