我想使用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
}
}
}
答案 0 :(得分:0)
一种方法是这样做:
在Form1
内你实例化Form2
就像这个新的Form2(this)
,即你传递Form1
本身,因此你应该能够使用任何公共变量/ Form1
中Form2
的属性。
更优选的方法是将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
的属性,您可以在其中设置private
,public
等。只需更改它,它就会在外面可见你的表格。
现在,在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();
}