![](/img/trans.png)
[英]C#: Add User defined Properties into the Properties Tab in Windows form
[英]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.