0

내 사용자 지정 컨트롤은 사용자 지정 레이블의 앵커 속성에 원하는 값을 설정합니다.Windows Form Designer 사용자 지정 컨트롤 변경 런타임시 올바르게 작동하지만 디자인 타임에는 작동하지 않는 앵커

Serializable을 Visible로 설정하면 런타임에 생성 된 코드가 생깁니다.이 코드는 형식 Content에는 없지만 디자이너의 컨트롤에는 레이블이 지정된 앵커 값 (왼쪽 및 맨 위)이 있습니다. 따라서 디자이너에서 올바른 동작을 얻으려면 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

관련 문제