Пользовательский элемент управления конструктора форм Windows изменяет привязку, которая работает правильно во время выполнения, но не во время разработки - PullRequest
0 голосов
/ 09 февраля 2011

Мой пользовательский элемент управления устанавливает нужные мне значения в свойствах для привязки на моей пользовательской метке.

Если для параметра 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 Ответ

1 голос
/ 09 февраля 2011

Вы жестко задаете значение свойства.Поэтому присвойте значение в конструкторе, сделайте его недоступным для просмотра, чтобы оно не отображалось в окне свойств, и убедитесь, что значение нельзя изменить и не сериализовать.Как это:

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
        }
    }
};
...