C # - Событие TabPage Color - PullRequest
       20

C # - Событие TabPage Color

1 голос
/ 21 июня 2010

C # определенно не моя сильная сторона, поэтому я ценю всех щедрых людей, которые делятся своими знаниями Я работаю с формой Windows и прочитал о событиях и нашел отличную справку о том, как изменить TabControl, чтобы у меня было событие OnDraw, которое добавит некоторую окраску к вкладкам.

Цвет каждой вкладки зависит от состояния переменной соединения: Текущий (зеленый) Потерянный (красный) Несвежий (желтый)

Событие OnDraw отлично работает для обновления цвета каждой вкладки, но это происходит только тогда, когда пользователь выбирает другую вкладку для просмотра.

Я бы хотел, чтобы цвет каждой вкладки обновлялся при изменении состояния соединения. Например, скажем, вкладка № 1 окрашена в зеленый цвет, но затем состояние соединения меняется на устаревшее, поэтому теперь вкладка должна быть окрашена в желтый цвет, но она не будет окрашиваться в такой цвет, пока пользователь не нажмет на другую вкладку и событие OnDraw срабатывает.

Так что я пытаюсь понять, как это сделать. Когда событие OnDraw запускается нормально (пользователь нажимает на другую вкладку), параметр «DrawItemEventArgs» передается в четный обработчик. Эта переменная уже заполнена соответствующими данными, необходимыми для выяснения, на какой вкладке щелкнули, границ этой вкладки и т. Д. Поэтому я не уверен, откуда она взялась или как я могу программно воссоздать такой вызов, чтобы перекрасить вкладки при каждом изменении переменной соединения.

Пожалуйста, дайте мне знать, если мне нужно что-то уточнить! Спасибо.

Ответы [ 3 ]

1 голос
/ 21 июня 2010

Вы можете вызвать Invalidate() на контроле, чтобы вызвать перерисовку.

1 голос
/ 21 июня 2010

Если у вас происходит событие при изменении состояния соединения, вы можете сделать

InvalidateVisual()

на всех ваших вкладках в этом событии.

0 голосов
/ 21 июня 2010

Если вы хотите иметь постоянное обновление, то вам, вероятно, нужно создать System.Timers.Timer объект.

Как только вы создадите Timer и установите значение отметки таймера на любой необходимый вам интервал (в миллисекундах), он будет запускать событие OnTimerTick через регулярные интервалы. Из этого события вы можете инициировать вызов вашего метода OnDraw через метод Invalidate(). Invalidate сообщает системе, что ваш экран должен быть обновлен, и при следующей доступной возможности он будет вызывать OnDraw и OnPaint.

...