2

例如,我有 Form1 和 Form2。Form1 具有公共属性

 public IMyCustomType selectedOption;

里面Form1comboBox自定义对象列表。我希望当用户从该组合列表中选择选项到 selectedOption 时填充该值,例如

public IMyCustomType selectedOption;

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

在里面Form2我想创建该选定类型的新实例。如何访问form2selectedOption属性并使用该值创建新实例?

4

4 回答 4

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 命名。

于 2013-06-04T11:31:36.630 回答
1

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

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

于 2013-06-04T11:39:01.597 回答
0

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

于 2013-06-04T11:28:51.983 回答
-1

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

于 2013-06-04T11:29:34.463 回答