在winforms中从其他形式访问公共属性

本文关键字:访问 属性 winforms 其他 | 更新日期: 2023-09-27 18:16:46

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

 public IMyCustomType selectedOption;

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

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

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

在winforms中从其他形式访问公共属性

如果form2显示自form1,您可以使用带有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命名。

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

(这也可以帮助你做一些巧妙的技巧,比如设置从当前表单中加载下一个表单;它将很容易被你的控制器类拾取,然后调用etc.)

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

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