Как получить отключенную ToolStripButton для рисования своего изображения в цвете? - PullRequest
0 голосов
/ 10 февраля 2009

У нас есть кнопка, которая позволяет пользователям «заблокировать» форму. Пользователям не разрешается «разблокировать» форму, поэтому при нажатии мы хотим, чтобы кнопка была отключена, чтобы пользователь получал соответствующую визуальную обратную связь.

Однако заказчик сообщает, что серый значок «замок» подсказывает им, что форма не заблокирована, поэтому мы хотели бы отобразить кнопку в нажатом состоянии, но с цветным значком, даже если кнопка инвалиды.

Как мы можем это сделать с абсолютным минимальным количеством переопределенной живописи?

Ответы [ 4 ]

1 голос
/ 10 февраля 2009

На самом деле я не согласен с подходом. У вашего клиента может быть правильное мнение, но я не думаю, что у него есть правильное предложение для исправления. Вы должны искать другие способы сделать форму "заблокированной". Изменение границ или цветов шрифта, появление большого значка замка или изменение с открытого на закрытое и т. Д. Кнопки выглядят определенным образом, потому что именно этого ожидают пользователи. Если у вас есть отключенная кнопка, которая выглядит так, как будто она может быть включена, это может сбить с толку пользователей, которые могут не понять, почему они не могут нажать ее.

0 голосов
/ 09 января 2014

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

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

  1. переопределить событие OnPaint или изменить средство визуализации вашей ToolStrip
  2. Нарисуйте ваше изображение без серого фильтра с помощью этого метода, просто установите изображение кнопки и положение изображения на вашей кнопке: http://msdn.microsoft.com/en-us/library/chas0s9c(v=vs.110).aspx

Два хороших примера, которые мне помогли:

Класс ToolStrip:

ToolStrip ts = new ToolStrip();
//[...]
ts.RenderMode = ToolStripRenderMode.Professional; //Professional is just an example
ts.Renderer = new CustomRenderer();

Класс CustomRenderer:

public class CustomRenderer: ToolStripProfessionalRenderer
{
    protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
    {
        if (!e.Item.Enabled) //in this case you will just have the image in your button, you need to add text etc in this if
        {
             //to draw the image
             Graphics g = e.Graphics;
             g.DrawImageUnscaled(e.Item.Image, new Point(2, 2)); //you need to specify the correct position
        }
        else //other cases
            base.OnRenderButtonBackground(e);
     }
}

Проблема в том, чтобы знать правильное положение всех элементов в вашей ToolStripButton, поэтому я рисовал ToolStripButton в каждом случае

0 голосов
/ 10 февраля 2009

Другой способ: вообще не устанавливать button.Enabled = false. Просто установите button.Checked = true или false, и когда кто-то нажмет на кнопку проверки для состояния Checked и сделайте все, что вы делаете. Кнопка будет функционировать так, как вы хотите, и оставаться цветным.

0 голосов
/ 10 февраля 2009

Вы можете установить ToolStripButton Image как BackgroundImage
а затем установите DiplayStyle на None.

Изображение должно оставаться цветным независимо от значения кнопки Enabled.

...