0

注意: この質問に対する可視性を高めるために、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:

カスタム コンポーネントが正しく表示されました

これは私が実際に表示したいものです。

私の質問

これを機能させるために、ここで何が欠けていますか?

4

1 に答える 1

2

あなたのラベルはコンポーネントではなくコントロールです。したがって、System.Windows.Forms.Design.ControlDesignerをControlのデザイン モード動作を拡張する基本クラスとして使用する必要があります。

于 2016-08-09T13:38:46.687 に答える