访问父窗体';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?
我用您的代码进行了测试。看起来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;
}
}