C#多窗口表单选择

时间:2014-09-09 18:54:01

标签: c# winforms

我正在开发一个多Windows窗体项目,其中从一个窗体上的Combobox中选择的值应该在另一个窗体上启用ComboBox。谁能告诉我怎么做?

在Form1上的Combobox上,列表中的一些项目是“Mango”,“Banana”,“Papaya”,“Orange”。

在Form2上的Combobox上,值为1,2,3,4。因此,如果用户在表单1上选择Mango或Papaya,将启用form2上的组合框以供用户选择一个数字。否则,组合框将保持禁用状态。

这就是我的所作所为。

我为两个表单创建了一个包含2个属性的公共类。

public class FormValues
{
    private bool _secondcbb = false;
    private string _firstcbb = "";

    public bool SecondCbb
    {
        get
        {
            return _secondcbb;
        }
        set
        {
            _secondcbb = value;
        }
    }

    public string FirstCbb {get; set;}

}

// ..... On Form1:

Form2 frm2 = new Form2();
FormValue val = new FormValue();

private void ComboBox1_SelectedIndexChanged(whatever inside)
{
    if(ComboBox1.SelectedText == "Mango")
    {
        val = true;
        frm2.ComboBox2 = val;
    }
}

我在Form2上没有做任何事情。除了添加控件并将Combobox设置为禁用。

3 个答案:

答案 0 :(得分:1)

在Form 2上创建公共静态方法,如果选择了Form 1上的comboBox项,则会改变comboBox状态:

public static void ChangeState(bool state) // Method on Form 2
{
    comboBox2.Enabled = state;
}

选择项目时启用comboBox2:

private void comboBox1_SelectedIndexChanged(whatever inside)
{
    if(comboBox1.SelectedText == "Mango" || comboBox1.SelectedText == "Papaya")
        frm2.ChangeState(true);
    else
        frm2.ChangeState(false);
}

答案 1 :(得分:0)

为什么不设置ComboBox2的enabled属性? 像这样:

frm2.ComboBox2.Enabled = true;

这样你也不需要FormValue,或者我错了吗?

答案 2 :(得分:0)

你的FormValues课程正在做什么并不是很清楚,但我认为首先不需要这样做。在Form2创建一个方法,该方法可以执行您需要的表单:

public void SomeMethod()
{
    // enable the control?
    // edit the control?
}

这将允许任何持有对Form2实例的引用的内容使用公开的功能来操作它。提供Form1的参考。它在内部实例化Form2的实例,或者它需要一个作为构造函数参数。无论哪种方式,Form1都应该引用Form2的实例:

private Form2 Form2Instance { get; set; }

然后在Form1中的控件处理程序中,您只需调用该实例上的功能:

this.Form2Instance.SomeMethod();