从子表单访问父表单的列表框

时间:2014-04-26 13:57:13

标签: c#

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

父表单代码:

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?

2 个答案:

答案 0 :(得分:1)

我测试了你的代码。看来Owner属性在构造函数中仍为null

MainFormWindow main = this.Owner as MainFormWindow;

因此mainFormnullmainForm.listBox1会引发异常。

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

答案 1 :(得分:0)

如果我需要我的子窗口/窗体来访问父窗口,我更喜欢明确地这样做。

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;
        }
}