自定义对话框:对象引用未设置为对象的实例
本文关键字:对象 实例 设置 对话框 对象引用 自定义 | 更新日期: 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
方法包含设计器生成的所有初始化逻辑,包括您正在使用的btnX
和lblHeader
控件的初始化。
我知道你已经有了答案,但只是一个小小的补充:
这是我的理解,这个错误发生时,你试图引用一个非静态对象,如果它是一个静态的。我想的对吗?
没有。这仅仅意味着由于放错位置的InitializeComponent()
,对象引用尚未初始化。如果你对静态声明的变量做同样的尝试,你会得到同样的结果。
如果你声明了一个静态方法,并试图访问该静态方法上下文中的成员,那么你会得到错误
非静态字段、方法或属性"成员"需要对象引用
无论如何:Patko +1:)