簡體   English   中英

如何將屬性添加到組中的表單,並在“屬性”窗口中顯示並可以編輯

[英]How to add properties to a Form on a group, and show in Properties Windows and be editable

我有這個課:

public class MyProps
{
    public MyProps()
    {

    }

    protected string myVar;
    public string MyProperty
    {
        get { return myVar; }
        set { myVar = value; }
    }

    protected int myOtherVar;
    public int MyOtherProperty
    {
        get { return myOtherVar; }
        set { myOtherVar = value; }
    }
}

我想添加到表單中,所以當我繼承它時,我將能夠在MyPropsX屬性中填充屬性。

我的表單中有以下代碼:

    protected  MyProps propsX = new MyProps();

    [TypeConverter(typeof(ExpandableObjectConverter))]
    public  MyProps MyPropsX
    {
        get
        {
            return propsX;
        }
        set
        {
            propsX = value;
        }
    }

現在,屬性MyProperty和MyOtherProperty很好地顯示在“屬性”窗口中,我可以直接在其中設置它們的值。

但是,當我關閉窗體並再次打開它時,所有更改都將丟失,這些屬性將重置為顯示零和空字符串。

我想念什么? 我應該從某些特殊類或中間件繼承我的MyProps類嗎? 還是一些特殊的屬性?

這對於評論和您的解決方案來說有點過多,所以我在回答您的評論時用一個答案,而不是另一個評論:

does not happen when I put properties directly on a form您要表示does not happen when I put properties directly on a form使用does not happen when I put properties directly on a form ,您正在使用設計器設置表單的某些屬性。 這些將被寫入MyForm.designer.cs文件。 當您進入類的代碼時,您會在構造函數中找到一個方法InitializeComponent() 將光標置於其上,然后按F12鍵。 在這里,您可以看到設計者寫入所有屬性的內容。 您應該尊重上述方法的注釋,並且不要開始使用代碼編輯器修改代碼,除非您真的了解設計人員在此處如何以及何時讀寫代碼(這是我可以根據需要解釋的另一章)。 否則,在更改代碼后嘗試與設計人員打開表單會導致錯誤消息或代碼丟失。

如果您還想設置一些默認值,則應返回到構造函數,並在InitializeComponent()函數下方添加所需的初始化代碼,然后一切都會按預期進行。

更新資料

正如您在評論中所寫,您已經知道設計器如何與* .designer.cs文件進行交互。 因此,我真的無法理解您的具體問題,但是也許其中一篇文章可以使您更深入地了解Microsoft如何編寫其組件:

這是很正常的,因為每次關閉表單並再次打開它時,您都會從表單MyPropsX獲得一個新實例,因此最好的方法是將屬性保存在任何類型的數據庫中(sql,access,textfiles) ,...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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