我正在尝试创建子窗体并从中访问父级列表框。
父表单代码:
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?
答案 0 :(得分:1)
我测试了你的代码。看来Owner
属性在构造函数中仍为null
。
MainFormWindow main = this.Owner as MainFormWindow;
因此mainForm
为null
而mainForm.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;
}
}