自定义对话框:对象引用未设置为对象的实例

本文关键字:对象 实例 设置 对话框 对象引用 自定义 | 更新日期: 2023-09-27 18:04:18

我知道这是一个非常常见的错误-但是作为一个c#新手,我发现通过查看其他帖子很难找到问题的原因,因为问题很模糊,可以应用于很多场景。因此,我开始提出我自己的问题。希望通过这样做,我可以了解更多的错误,所以我希望你们不要介意。

这是我的理解,这个错误发生时,你试图引用一个非静态对象,如果它是一个静态的。我想的对吗?

我的问题是:我试图创建我自己的自定义对话框(而不是使用标准的winforms一个)。所以我有下面的代码:

public partial class Dialog : Form
{
    public Dialog(string header, string msg, bool closeable, int buttons)
    {
        if (!closeable)
            btnX.Hide();
        if (header != null || header != String.Empty)
            lblHeader.Text = header;
        if (msg != null || msg != String.Empty)
            lblMessage.Text = msg;
        InitializeComponent(); //Problem is here, this should be at the top.
    }
    private void btnX_Click(object sender, EventArgs e)
    {
        Close();
    }
}

我使用以下行调用这个Dialog类:

Dialog dlg = new Dialog("HEADER", "HELLO", true, buttonChoice);
dlg.ShowDialog();

但是我正在接通Object reference not set to an instance of an object:

lblHeader.Text = header;(我想我也会在"消息"行得到它)。

谁能告诉我我哪里做错了?谢谢!

用答案更新:在InitializeComponent()函数被调用之前,类中的对象不应该被引用

自定义对话框:对象引用未设置为对象的实例

InitializeComponent()调用移到构造函数的开头。

InitializeComponent方法包含设计器生成的所有初始化逻辑,包括您正在使用的btnXlblHeader控件的初始化。

我知道你已经有了答案,但只是一个小小的补充:

这是我的理解,这个错误发生时,你试图引用一个非静态对象,如果它是一个静态的。我想的对吗?

没有。这仅仅意味着由于放错位置的InitializeComponent(),对象引用尚未初始化。如果你对静态声明的变量做同样的尝试,你会得到同样的结果。

如果你声明了一个静态方法,并试图访问该静态方法上下文中的成员,那么你会得到错误

非静态字段、方法或属性"成员"需要对象引用

无论如何:Patko +1:)