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

本文关键字:另一个 表单 comboBox | 更新日期: 2023-09-27 18:27:59

我想使用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
    }
}

}

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

一种方法是这样做:

Form1中,您像这个新的Form2(this)一样实例化Form2,即您正在传递Form1本身,因此您应该能够在Form2中使用Form1的任何公共变量/属性。

一种更可取的方法是将Form1selecteditem存储在一些global scope中,您可以在Form2中访问它。

您可以使ComboBox成为如下形式的属性:

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

然后它就会起作用。然而,你必须稍微调整一下你的代码,因为你需要1)显示表单,2)组合框将立即没有任何选择,所以你会得到另一个异常,这样你就可以强制选择。所有的代码看起来都是这样的:

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
}

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

现在,在Form2的代码中,您正在创建一个新的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());
    }
}

形式1:

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