2016-08-22 2 views
0

У меня есть пользовательский контроль, над которым я работаю. Я хочу изменить его цвет, когда он включен или отключен. Поэтому я написал код внутри OnEnabledChanged.Как переопределить свойство Control.Enabled в C# Winforms?

 protected override void OnEnabledChanged(EventArgs e) 
     { 
      if (!Enabled) 
      { 
       temp1 = colorOn; 
       temp2 = colorOff; 
       colorOff = colorOn = Color.LightGray; 
      } 
      else 
      { 
       colorOn = temp1; 
       colorOff = temp2; 
      } 
      Invalidate(); 
      base.OnEnabledChanged(e); 
     } 

Этот код отлично работает во время выполнения, но не при проектировании. Он не поднимался, когда я изменил свойство Enabled во время разработки. Поэтому я хочу переопределить свойство элемента управления Enabled. Но он не появляется при вводе текста.

Так как я могу его переопределить? Если есть другой способ, я хочу его использовать.

ответ

3

Это полностью нормально. Одна из задач конструктора управления - это перехват поведения определенных свойств и методов, которые мешают использованию элемента управления в представлении дизайна. Свойство Enabled является одним из них, если это будет работать и во время разработки, тогда вы больше никогда не сможете выбрать элемент управления. Дизайнер не может этого допускать, конечно, он всегда заставляет Enabled = true во время разработки и перехватывает присвоения этому свойству. Как вы узнали. Переопределение может также работать, это не виртуальная собственность, но в любом случае не даст вам того, чего вы хотите. Свойство Visible - это еще один, который перехвачен таким образом, вы можете себе представить, как это происходит не так :)

Вам нужно будет создать своего собственного дизайнера, чтобы что-то сделать. Обычно это, как правило, базака, чтобы убить комара, особенно в этом случае, так как вы все еще ничего не можете сделать с помощью Enabled. И хуже того, это поведение реализуется классом ControlDesigner, классом, который вам нужен, в качестве базового класса, чтобы получить дизайнер. Я серьезно сомневаюсь, что это практично.

Ничего не делать, чтобы исправить это, вполне разумно, учитывая, что ни один из других элементов управления в панели инструментов не изменит их внешний вид ни при изменении их свойства Enabled в дизайнере.

+0

Логика была настолько простой, и объяснение было легко понятным. Спасибо @Hans. –