2016-08-09 2 views
0

NB:私はこの質問にもっと気づくために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 

:私は、ユーザーに表示したくないほとんどの部分について

はOK取り組んでいるが、私はいくつかのプロパティを隠すために、カスタムデザイナを使用しようとしました複雑です。私のデザイナーをアクティブにするには、コンポーネントクラス定義のアトリビュートとして設定する必要があります:

<Designer(GetType(MyDesigner))> 
Public Class MyLabel 
    Inherits Label 

    Public Sub New() 
     MyBase.New() 
    End Sub 
End Class 

これは本当に複雑ではありません。

問題

問題は、新しいMyLabelがデザインサーフェイスに作成され、私はDesignerAttributeを設定しているとき、それは絵のように、表面の下に表示され、次のとおりです。

Custom Component wrongly displayed

そして、ここで私はDesignAttributeを削除すると、結果である:

Custom Component correctly displayed

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

私の質問

私はこの仕事をするために、ここで何をしないのですか?

+0

ええ、奇妙に思えます。何らかの理由で、デザイナ属性を適用するときに実際のコントロールではなくラベルとしてコンポーネントが追加されます。 –

答えて

2

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

+1

ああ、もちろん!私はそれが継承されるのを見ていない! +1 –

+0

ありがとうございました...私は今、本当に馬鹿だと感じています... –

関連する問題