[英]Programmatically Hide Field in PropertyGrid
使用
<System.ComponentModel.TypeConverter(GetType(System.ComponentModel.ExpandableObjectConverter))> _
在由數字屬性組成的 class (這是另一個類的屬性)的聲明上。
我簡單地加載了這個 class 的實例......
PropertyGrid1.SelectedObject = oColumn
顯然我不想在代碼中手動構建 propertygrid,我知道該怎么做。
但這就是問題所在。 根據屬性的值,某些其他屬性不應該是可見的,就好像我使用了
<System.ComponentModel.Browsable(False)> _
屬性聲明上的屬性。
無論如何以編程方式執行此操作,而無需手動處理屬性網格的所有構建>
其實這完全有可能。 第一種也是最簡單的方法是設置網格的 BrowsableAttributes 屬性:
propGraph.BrowsableAttributes = new AttributeCollection(
new Attribute[]
{
new CategoryAttribute("Appearance")
});
這將過濾掉所有與您提供的屬性類型不匹配的屬性。 不幸的是,這是一個積極的過濾器,而不是一個消極的過濾器,這使得它不太有用恕我直言。
其次,同樣容易,您可以在要在 PropertyGrid 中顯示的 object 周圍創建一個簡單的包裝器,並重新定義要隱藏/等的任何屬性。 作為直通屬性:
public class MyDerivedControl : public TextBox
{
[Browsable(false)]
[Category("MyCustomCategory")]
public new bool Enabled
{
get { return base.Enabled }
set { base.Enabled = value; }
}
}
將其彈出到屬性網格中,啟用屬性將被隱藏。
第三,您可以自定義 PropertyGrid 本身並進入類型描述符的世界等等,但如果您只想隱藏幾個屬性,那就太過分了。
希望這可以幫助。
如果您希望使用 gridItem.Hide() 那么答案是否定的。 在 MS PropertyGrid 中實現這一點的唯一方法是通過 TypeConverter 或自定義類型描述符(實現 ICustomTypeDescriptor)的 GetProperties 方法動態發布您的屬性。 我會先嘗試使用 TypeConverter(特別是如果您要檢查的屬性值處於同一級別),需要做的編碼更少。
至於 C++,這是在propertyGrid
中顯示所選類別的簡單解決方案。
cli::array<Attribute^,1>^ attrs = {gcnew CategoryAttribute("Appearance")};
this->PropertyGrid->BrowsableAttributes = gcnew AttributeCollection(attrs);
this->PropertyGrid->SelectedObject = this->SelectedControl;
這將僅在 propertyGrid 中顯示“外觀”類別並隱藏所有其他類別。 假設您可以自己翻譯 C# 中的代碼。
這個問題類似,但答案更完整。 有些人可能希望交叉引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.