簡體   English   中英

對象引用未設置為對象的實例(自定義類作為表單上的屬性)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM