Как ускорить обновление BackColor метки?

ИЗМЕНИТЬ:

Мне удалось найти обходной путь. Теперь на MouseEnter я устанавливаю фокус на кнопку и меняю MouseOverBackColor на текущий BackColor кнопки; У меня также есть обработчик событий (в родительском контейнере кнопки) для GotFocus, который соответственно изменяет BackColor. Я понятия не имею, почему это работает таким образом, но я только заставил его работать в этой конкретной комбинации. Опять же, я ищу лучшие способы сделать это, так что продолжайте в том же духе, отвечая на вопросы.

Я сделал переопределение кнопки, и теперь свойство Text переопределяет пользовательскую дочернюю метку. Проблема в том, что у меня есть стили, примененные к кнопке (изменение цвета при фокусе/вводе мыши).

Я хотел бы, чтобы метка соответственно изменила свой цвет, и до сих пор я добился этого двумя способами:

  1. Установите метку BackColor на Transparent
  2. Переопределите OnMouseEnter и OnMouseLeave, чтобы соответствующим образом изменить BackColor метки.

Они оба работают; единственная проблема заключается в небольшой задержке при изменении BackColor ярлыка; это приводит к небольшому разрыву графики при изменении BackColor кнопки. Это не такая уж большая проблема, но это немного раздражает; Буду признателен за любой полезный совет, который вы мне дадите.


person rotSin    schedule 22.02.2011    source источник
comment
Почему бы вам просто не сделать фоновый цвет этикетки прозрачным навсегда?   -  person Daniel Hilgarth    schedule 22.02.2011
comment
@Daniel: я сомневаюсь, что это поможет производительности. Вопрос, похоже, не указывает на то, что он (она) меняет метку BackColor на что-то другое между ними.   -  person Cody Gray    schedule 22.02.2011
comment
Вы правы, вопрос не указывает на это. Но только так я могу объяснить задержку в ОБОИХ сценариях...   -  person Daniel Hilgarth    schedule 22.02.2011
comment
Судя по вашему вопросу, вы показываете элемент управления Label поверх элемента управления Button. Если да, то зачем ты это делаешь? Вы можете просто изменить свойство BackColor для Button и добиться того же эффекта.   -  person Cody Gray    schedule 22.02.2011
comment
Проблема в том, что у меня также есть MouseEnterBackColor и MouseDownBackColor (которые не зависят от BackColor), и их нужно установить динамически, чтобы наследовать Backcolor родителей, которые также могут меняться (фокусироваться или нет), и когда происходит этот сценарий (MouseOver, затем изменить MouseEnterBackColor к родительскому BackColor, то есть когда возникает изменчивость метки BackColor)   -  person rotSin    schedule 22.02.2011


Ответы (1)


в зависимости от того, как часто ваше приложение обрабатывает насос сообщений Windows или насколько оно простаивает, вам может потребоваться вызвать Control.Update(), чтобы заставить .NET немедленно обновить рисунок элемента управления.

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.update.aspx

person MickyD    schedule 09.07.2011
comment
Поскольку я разместил этот вопрос, я узнал много нового, в том числе и об этой конкретной проблеме. Оглядываясь назад на этот вопрос, он сейчас не имеет такого большого смысла, как тогда :) Тем не менее, вы правы; если меня не устраивает скорость потока сообщений, примените то, что мне нужно. - person rotSin; 14.07.2011