访问父窗体';s子窗体中的列表框

本文关键字:窗体 列表 访问 | 更新日期: 2023-09-27 18:00:22

我正在尝试创建子窗体并从中访问父窗体的列表框。

父表单代码:

private void buttonAdd_Click(object sender, EventArgs e)
    {
        ClientCard f = new ClientCard();
        f.Owner = this;
        f.ShowDialog();
    }

儿童表单代码:

public ClientCard()
    {
        InitializeComponent();
        MainFormWindow main = this.Owner as MainFormWindow;
        this.mainForm = main;
    }
MainFormWindow mainForm;
private void buttonTest_Click(object sender, EventArgs e)
    {             
        textBoxName.Text = this.mainForm.listBox1.SelectedItem.ToString();
    }

每当我尝试使用它时,我都会得到"对象引用未设置为对象实例"的错误。为什么我不能这样用?

更新:

请注意,如果我这样使用它,代码会很好地工作:

private void buttonTest_Click(object sender, EventArgs e)
    {
        MainFormWindow main = this.Owner as MainFormWindow;
        textBoxName.Text = main.listBox1.SelectedItem.ToString();
    }

更新:

感谢您的建议,我在"buttonClick"上放置了断点,现在我可以看到mainForm为null。但我还是不明白为什么。如果我在子窗体构造函数中初始化它,它怎么会为null?

访问父窗体';s子窗体中的列表框

我用您的代码进行了测试。看起来Owner属性在构造函数中仍然是null

MainFormWindow main = this.Owner as MainFormWindow;

所以mainForm就是null,而mainForm.listBox1抛出异常。

您需要从按钮的单击事件中引用this.Owner,或者在表单的加载事件中设置this.mainForm

如果我需要我的子窗口/窗体来访问父窗口,我更喜欢显式执行。

private void buttonAdd_Click(object sender, EventArgs e)
{
    ClientCard f = new ClientCard(this);
    f.ShowDialog();
}
public partial class ClientCard : Form
{
    private MainWindow MainWnd;
    public ClientCard(MainWindow Wnd)
        {
            InitializeComponent();
            MainWnd = Wnd;
        }
}