[英]Object reference not set to an instance of an object (custom class as property on a form)
我有一個WinForms應用程序。
我的形式之一有兩個屬性,這是自定義類,即
private cContact con;
private cIP ip;
在表單的LOAD事件中,我按如下方式初始化這些屬性-
this.con = new cContact();
this.ip = new cIP();
這些類的無參數構造函數只需填充ID字段即可,例如
class cContact
{
private int _id;
//...plus several other properties here
public cContact()
{
this._id = 0;
}
public int ID
{
get {return this._id;};
set {this._id = value};
}
}
這兩個類都包含ID僅為1(int)的多個屬性。
這兩個類都包含所有屬性的“獲取/設置”訪問修飾符。
這兩個類已經使用了一年多,沒有任何問題,所以我認為類本身沒有問題。
然后在我的表單中,我有一個事件處理程序,它試圖訪問兩個表單屬性(我的自定義類)中的ID
private void Button_Click( . . .)
{
int myID = this.con.ID
}
但是我收到一條消息說
Object reference not set to an instance of an object
由於類是在Form的LOAD事件中實例化的,因此我看不到為什么按鈕單擊事件處理程序無法訪問類ID字段。 可以肯定的是,當你們中的一個指出這一點時,這將是一件簡單的事情,但是可惜它已經讓我撓頭了太久了。
我懷疑這里可能發生的事情是,當您不希望窗體設計器將屬性序列化到“ Designer.cs”文件中時。
但是,只有在屬性為公共屬性時,才會發生這種情況。
如果它們是公共的,並且您不希望Forms設計器管理屬性值的序列化和反序列化,則必須使用DesignerSerializationVisibility
屬性告訴它不要這樣做,例如:
[
Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
]
public MyType MyPropertyWhichMustNotBeSerialized
{
get;
set;
}
如果這是發生了什么事,你應該能夠看到不必要的序列化中的“Designer.CS”文件。 您可以刪除它,然后再向上面的屬性中添加一個屬性,然后就可以了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.