1

我創建了一個Button後裔,我隱藏了所有我不使用的屬性。在設計器中刪除GenerateMember和修飾符屬性

我不喜歡這樣寫道:

[Browsable(false)] 
[Bindable(false)] 
[EditorBrowsable(EditorBrowsableState.Never)] 
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
[Obsolete("", true)] 
public new Boolean AllowDrop { get; set; } 

大多數屬性得到正確隱藏,不能使用。

然而,有兩個屬性,我不能擺脫。

enter image description here

有沒有辦法還去除GenerateMember和修改程序的設計?

回答

2

您可以爲您的控件創建新的ControlDesigner並覆蓋其方法PostFilterProperties。該方法允許您更改或刪除屬性字典中的項目。

屬性字典中的鍵是屬性的名稱。雖然ModifiersGenerateMember是不是你控制的實際性能,它們是設計時屬性,但你可以刪除它們這樣:

using System.Windows.Forms; 
using System.Windows.Forms.Design; 
[Designer(typeof(MyCustomControlDesigner))] 
public class MyCustomControl:Button 
{ 
} 
public class MyCustomControlDesigner:ControlDesigner 
{ 
    protected override void PostFilterProperties(System.Collections.IDictionary properties) 
    { 
     base.PostFilterProperties(properties); 
     properties.Remove("Modifiers"); 
     properties.Remove("GenerateMember"); 
    } 
} 

要隱藏屬性網格的屬性,而不是覆蓋或陰影他們,你可以爲他們做同樣的事情。

0

我不認爲你可以將其刪除,因爲它不是一個類屬性,但一個設計時屬性,只有設計者使用:

建立的Visual Studio如果你有玩過Whidbey的,您可能有 注意到名爲GenerateMember的新屬性,該屬性顯示在 屬性網格中,用於顯示添加到Windows 表單中的所有控件和組件。想知道它是關於什麼的?它實際上是一個設計時間 擴展屬性,它允許您控制組件中添加 的組件是由類中的成員變量引用還是在InitializeComponent中的本地 變量引用。默認情況下,它被設置爲true,但如果 你有任何你沒有真正引用 InitializeComponent之外的任何組件,你可以將它設置爲false。這樣,您可以將 類中的成員變量僅限制爲您真正需要成員變量的組件 - 僅用於防止混亂。

同樣適用於ModifiersLocked

+0

儘管'Modifiers'和'GenerateMember'不是控件的實際屬性,並且是設計時屬性,但是您可以通過創建自定義的'Designer'窗體控件並覆蓋'PostFilterProperties'來刪除它們,就像我在[這裏] (http://stackoverflow.com/a/38771092/3110834)。 –