从不同的表单访问 ComboBox.SelectedItem

问题描述 投票:0回答:1

我有两个表单(

Form1
Form2
),在
Form1
中我创建了
Form2
的实例并显示它。

public void buttonFrom1_Click(object sender, EventArgs e)
{
    Form2 frm2 = new Form2();
    frm2.Show();
}

如何从

ComboBox
访问
Form1
中的
Form2
?我尝试从以另一种形式创建的
From1
实例进行访问,但收到错误:
"cs0103 the name "frm1" does not exist in the current context"

public void buttonForm2_Click(object sender, EventArgs e)
{
    string item = frm1.BanksComboBox.SelectedItem.ToString();
    MessageBox.Show(item);
}
c# visual-studio combobox
1个回答
0
投票

这是一个“紧密耦合”的解决方案,与“松散耦合”相反,这是 jmcilhinney 在评论中正确建议的。

这是通过表单的

Owner
属性完成的,您可以在调用
Show()
时设置该属性:

public partial class Form1 : Form
{

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2();
        frm2.Show(this); // <-- pass in this Form1 instance as the "Owner".
    }

}

然后,在 Form2 中,将

Owner
投射回 Form1 并访问 ComboBox(假设其
Modifiers
属性是公共的):

public partial class Form2 : Form
{

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 frm1 = this.Owner as Form1;
        if (frm1 != null)
        {
            string item = frm1.BanksComboBox.SelectedItem.ToString();
            MessageBox.Show(item);
        }
    }

}

我喜欢这种方法,因为它非常容易理解并且无需更改太多代码即可实现。仅当 Form2 仅与 Form1 结合使用时才使用此方法。换句话说,如果没有 Form1,Form2 就毫无用处,那么这种方法可能是一个合理的选择。如果 Form2 本质上更通用,并且将与 Form1 之外的其他 Form 一起使用,那么松散耦合的方法会更有意义。

© www.soinside.com 2019 - 2024. All rights reserved.