2013-09-10 5 views
8

У нас есть проект Windows Forms с довольно несколькими кнопками FlatStyle.Как избежать изменения цвета при отключенной кнопке?

Когда мы выключаем кнопки, цвета кнопок меняются автоматически Frown | :(

Можно ли изменить это каким-то образом, чтобы мы могли управлять цветами сами?

+0

Вы хотите, чтобы цвет текста отображался как активированный или цвет фона? – Harsh

+0

Цвет текста как активированный и обратный цвет как активированный - на самом деле для некоторых кнопок все, как при активации ... – user2500179

+4

Увидев пользователя, удаляющегося кнопкой, которая была отключена, но не * выглядела * отключена, является трагедией пользовательского интерфейса. Вы не получите никакой помощи от Winforms, чтобы вызвать такую ​​трагедию, она реализует правила руководства по дизайну пользовательского интерфейса. Правила, которыми знаком каждый пользователь. Вам нужно будет создать свою собственную трагедию с помощью собственного управления кнопками. –

ответ

9

Вы должны использовать событие EnabledChanged, чтобы установить желаемый цвет. Вот пример.

private void Button1_EnabledChanged(object sender, System.EventArgs e) 
{ 
Button1.ForeColor = sender.enabled == false ? Color.Blue : Color.Red; 
Button1.BackColor = Color.AliceBlue; 
} 

используйте нужные цвета в соответствии с вашим требованием.

Кроме того, необходимо использовать событие рисования.

private void Button1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) 
{ 
dynamic btn = (Button)sender; 
dynamic drawBrush = new SolidBrush(btn.ForeColor); 
dynamic sf = new StringFormat { 
    Alignment = StringAlignment.Center, 
    LineAlignment = StringAlignment.Center }; 
Button1.Text = string.Empty; 
e.Graphics.DrawString("Button1", btn.Font, drawBrush, e.ClipRectangle, sf); 
drawBrush.Dispose(); 
sf.Dispose(); 

} 
+0

Отлично. Проблема только в том, что изображение на кнопках все еще меняет цвета ... Я пробовал использовать e.Graphics.DrawImage(), но это не помогло. Изображение все еще меняет цвет :( Но ваше решение устраняет проблему с цветом текста. – user2500179

+0

Рад, что это вам помогло. Пожалуйста, отметьте как ответ, если вы получили ответ на свой вопрос. – Harsh

+0

Это помогло. Спасибо. – user2500179

1

Чтобы получить менее нечеткий текст, используйте класс TextRenderer вместо:

private void Button1_Paint(object sender, PaintEventArgs e) 
     { 
      Button btn = (Button)sender; 
      // make sure Text is not also written on button 
      btn.Text = string.Empty; 
      // set flags to center text on button 
      TextFormatFlags flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak; // center the text 
      // render the text onto the button 
      TextRenderer.DrawText(e.Graphics, "Hello", btn.Font, e.ClipRectangle, btn.ForeColor, flags); 
     } 

и метод Button1_EnabledChanged как в ответ Суровые годов.

+0

Я бы избегал настройка свойств в событии рисования. – LarsTech

0

Я следил за следующим подходом: - Событием Click() кнопки можно управлять с помощью настраиваемой переменной.

private bool btnDisabled; 
private void btnClick(object sender, EventArgs e){ 
    if(!btnDisabled) return;} 

Таким образом, эту кнопку даже не нужно отключать. У кнопки все еще есть ощущение щелчка, но никаких действий не будет. Необходимо использовать правильные цвета, чтобы сообщить, что кнопка отключена.

Смежные вопросы