在c#中使用另一个表单的comboBox

时间:2013-08-17 23:51:40

标签: c# forms combobox

我想使用Form1中的comboBox1,并在表单2中单击按钮后将其显示在MessageBox中。在Form2中我使用了:

    MessageBox.Show(Form.comboBox1.SelectedItem.ToString());

我收到一条错误消息,指出由于保护级别,comboBox1无法访问。有没有办法可以让它公开?我还尝试将comboBox1.SelectedItem.ToString()分配给Form1中的字符串变量,并在Form2中的MessageBox中使用它,但它似乎也不起作用。有没有其他方法可以使这个工作?

以下是我的其余代码:

    public Form1()
    {
        InitializeComponent();

        for (int i = 1; i <= 30; i++)
        {
            string[] numbers= { i.ToString() };
            comboBox1.Items.AddRange(numbers);
        }

    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 Form = new Form2();
        Form.Show();
    }
}

窗体2:

    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 Form = new Form1();
        MessageBox.Show(Form.comboBox1.SelectedItem.ToString()); //Here is my error
    }
}

}

3 个答案:

答案 0 :(得分:0)

一种方法是这样做:

Form1内你实例化Form2就像这个新的Form2(this),即你传递Form1本身,因此你应该能够使用任何公共变量/ Form1Form2的属性。

更优选的方法是将selecteditem Form1 global scope存储在某些Form2中,您可以在{{1}}中访问该{{1}}。

答案 1 :(得分:0)

您可以将ComboBox作为表单的属性,如下所示:

public partial class Form1 : Form
{
    public ComboBox Combo1 { get { return this.comboBox1; } }
   ...
}

然后它会工作。但是,您需要稍微调整一下代码,因为您需要1)显示表单和2)ComboBox将不会立即选择任何内容,因此您将获得另一个异常,因此您可以强制选择。所有代码都如下所示:

private void button1_Click(object sender, EventArgs e)
{

    Form1 Form = new Form1();
    Form.Show();
    Form.Combo1.SelectedIndex = 0;
    MessageBox.Show(Form.Combo1.SelectedItem.ToString()); //Here is my error
}

答案 2 :(得分:0)

简单回答:在设计器中,每个控件都有一个名为Modifiers的属性,您可以在其中设置privatepublic等。只需更改它,它就会在外面可见你的表格。

现在,在Form2的代码中,您正在创建一个 new Form1,而不仅仅是访问先前创建Form2的实例。这将向用户显示第二个Form1,我想这不是你想要做的。 解决这个问题的最天真的方法是为Form2提供一个公共属性,该属性将保存创建它的Form1,并使用它来访问组合:

public partial class Form2 : Form
{
    public Form1 ParentForm {get; set;}

    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(this.ParentForm.comboBox1.SelectedItem.ToString());
    }
}

在Form1中:

private void button1_Click(object sender, EventArgs e)
{
    Form2 form = new Form2();
    form.ParentForm = this;
    form.Show();
}
相关问题