C# 访问父窗体';子窗体中的列表框
我正在尝试创建子窗体并从中访问父窗体的列表框 父窗体代码:C# 访问父窗体';子窗体中的列表框,c#,C#,我正在尝试创建子窗体并从中访问父窗体的列表框 父窗体代码: private void buttonAdd_Click(object sender, EventArgs e) { ClientCard f = new ClientCard(); f.Owner = this; f.ShowDialog(); } public ClientCard() { InitializeComponent();
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 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;
}
}
是的,当然是。你能在按钮测试中设置一个断点并检查各种对象吗?这应该可以很快告诉您什么是null。是否可能此时未实例化
TextBoxName
?谢谢,但即使我尝试使用Convert.ToString()等,也会出现此错误。