如何根据form1组合框值禁用form2组合框?

时间:2013-12-07 13:16:51

标签: c# winforms forms combobox pass-by-reference

我正在尝试根据表单1选择的值禁用表单2中的某些组合框。

让我们说 在Form1中,如果comboxbox值为0 禁用表单2中的某些组合框

我在form1中做了什么

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    public ComboBox combo
    {
        get { return dropdown; } 
    }

到目前为止的表格2

private void Form2_Load(object sender, EventArgs e)
{
  Form1 f = new Form1();
  if (f.combo.SelectedIndex == 0)
  {
    comboBox1.Enabled = false;
  }

这不起作用,我无法将其排除(c#的新内容)

2 个答案:

答案 0 :(得分:0)

如果使用以下语法在Form上创建Form1:

  Form1 f = new Form1();

您将获得Form1(或“copy”)的新实例,而不是已经打开的实例。您需要将Form1的引用传递给Form2。

将此代码放入Form2:

private Form1 myParentForm;
public Form2(Form1 parentForm)
{
  myParentForm = parentForm;
}

然后,您可以通过变量myParentForm使用Form1。像这样:

private void Form2_Load(object sender, EventArgs e)
{
  if (myParentForm.combo.SelectedIndex == 0)
  {
    comboBox1.Enabled = false;
  }
}

在Form1中,您的代码如下:

Form2 mySecondForm = new Form2();

将其更改为:

Form2 mySecondForm = new Form2(this);

答案 1 :(得分:0)

Here is a prior answer with multiple samples calling one form as parameter to another including one of those as a full step-by-step sample.

现在,关于启用/禁用,您可以使用属性或方法方法告诉“其他”表单启用/禁用状态...示例只是设置/获取值。如果对所讨论的一个表单执行诸如boolean之类的集合,则您的setter部分可能类似于

   private bool enableFromOtherForm;
   public bool EnableFromOtherForm
   { 
      get { return enableFromOtherForm; }
     set { this.controlToChange.IsEnabled = value; }
   }