0

我的自定義控件在我的自定義標籤上的錨定屬性中設置了我想要的值。Windows窗體設計器自定義控件更改在運行時正確工作但在設計時不能正常工作的錨點

將Serializable設置爲Visible我得到爲運行時生成的代碼,我沒有使用Content類型,但設計器中的控件具有Anchor值給出了一個Label(左和頂) ,因此要在設計器中獲得正確的行爲,需要對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 2011-02-09 01:18:47

相關問題