Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问父窗体';子窗体中的列表框_C# - Fatal编程技术网

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()等,也会出现此错误。