0

カスタムコントロールは、カスタムラベルのアンカーのプロパティに必要な値を設定します。Windowsフォームデザイナのカスタムコントロールの変更アンカーは、実行時に正しく動作しますが、デザイン時には動作しません。

SerializableをVisibleに設定すると、実行時に生成されるコードが生成されますが、これは型コンテンツでは発生しませんでしたが、デザイナのコントロールにはラベルが付いたアンカー値(LeftおよびTop)ので、デザイナで正しい動作を得るには、Anchorプロパティへの手動(非)変更が必要です。

私は実際にこの仕事をするデザイナーを書いたくはありません(私の進歩率では、それは賢明ではないと思います!)、より簡単な方法はありますか?

public: 
[DesignerSerializationVisibility(DesignerSerializationVisibility::Visible)] 
    virtual property System::Windows::Forms::AnchorStyles Anchor 
    { 
    System::Windows::Forms::AnchorStyles get() override 
    { 
     return static_cast<System::Windows::Forms::AnchorStyles 
     ((System::Windows::Forms::AnchorStyles::Top 
     | System::Windows::Forms::AnchorStyles::Left) 
     | System::Windows::Forms::AnchorStyles::Right);; 
    } 

    void set(System::Windows::Forms::AnchorStyles x) override 
    { 
     __super::Anchor = static_cast<System::Windows::Forms::AnchorStyles 
     ((System::Windows::Forms::AnchorStyles::Top 
     | System::Windows::Forms::AnchorStyles::Left) 
     | System::Windows::Forms::AnchorStyles::Right); 

    } 
    } 

答えて

1

プロパティ値をハードコーディングしています。プロパティーウィンドウに表示されないように、値を変更できず、シリアル化されないように、コンストラクター内の値を割り当ててブラウズ不可にします。このように:

ref class MyControl : Control { 
public: 
    MyControl() { 
     __super::Anchor = AnchorStyles::Top | AnchorStyles::Left | AnchorStyles::Right; 
    } 

    [Browsable(false), EditorBrowsable(EditorBrowsableState::Never)] 
    [DesignerSerializationVisibility(DesignerSerializationVisibility::Hidden)] 
    virtual property System::Windows::Forms::AnchorStyles Anchor { 
     AnchorStyles get() override { 
      return __super::Anchor; 
     } 
     void set(AnchorStyles) override { 
      // do nothing 
     } 
    } 
}; 
+0

もう一度、あなたはスポットです。私の評判が許せば、私はあなたに投票をしています。 – bobinski

関連する問題