注意: この質問に対する可視性を高めるために、C# タグを付けました。C# での回答としては問題ありません。VB .NET に変換できます。私が直面している問題は、.NET Framework の概念にあります。
私は現在、グラフィック デザイナーを作成しており、ユーザーが独自のカスタマイズされたコンポーネントのセットをデザイン サーフェイスに追加し、それらを希望どおりに配置して、テキスト ファイルに保存できるようにしています。
ほとんどの部分で問題なく動作していますが、ユーザーに表示したくないいくつかのプロパティを非表示にするために、カスタム デザイナーを使用しようとしました。
Public Class MyDesigner
Inherits ComponentDesigner
Public Overrides Sub Initialize(component As IComponent)
MyBase.Initialize(component)
End Sub
'These are the properties I will hide
' (real list is way longer)
Private _hiddenPropertyList As String() = { _
"AccessibleRole", _
"AccessibleDescription", _
"AccessibleName", _
}
Protected Overrides Sub PreFilterProperties(properties As IDictionary)
MyBase.PreFilterProperties(properties)
For Each PropName As String In _hiddenPropertyList
If properties.Contains(PropName) Then
'We hide the properties that are in the list
properties.Remove(PropName)
End If
Next
End Sub
End Class
したがって、これはそれほど複雑ではありません。デザイナーを有効にするには、コンポーネント クラス定義で属性として設定する必要があります。
<Designer(GetType(MyDesigner))>
Public Class MyLabel
Inherits Label
Public Sub New()
MyBase.New()
End Sub
End Class
したがって、これもそれほど複雑ではありません。
問題
問題は、デザイン サーフェス上に新しいMyLabel
が作成され、 を設定するDesignerAttribute
と、図のようにサーフェスの下に表示されることです。
そして、これが私が削除したときの結果ですDesignAttribute
:
これは私が実際に表示したいものです。
私の質問
これを機能させるために、ここで何が欠けていますか?