ToolStripButton «Сбросить внешний вид» / «Событие покидания огня» - PullRequest
3 голосов
/ 21 июля 2011

У меня есть ToolStripButton, который выполняет действие. Пользователь нажимает кнопку, и кнопка отключается, чтобы предотвратить выполнение действия дважды. После завершения действия кнопка снова включается. Все работает отлично ... кроме:

Поскольку кнопка отключена, она не вызывает событие MouseLeave и, как следствие, внешний вид кнопки не обновляется. Чтобы было абсолютно ясно, когда мышь входит в ToolStripButton, кнопка подсвечивается оранжевым (по умолчанию) с черным квадратом вокруг нее. Это выделение не удаляется при повторном включении кнопки. К этому времени курсор мыши уже давно исчез из элемента управления. Наведение мыши на кнопку естественным образом исправляет кнопку, перерисовывая ее.

То, что я хотел бы сделать, - это какой-нибудь метод ToolStripButton, который «сбрасывает» его внешний вид. Такой метод может даже существовать в ToolStrip, но, несмотря на поиск, я не смог найти ничего подобного.

В качестве альтернативы я мог бы напрямую вызвать событие «Mouse Leave» на кнопке. Насколько я знаю, нет никакого способа легко сделать это в C # .NET.

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

Ответы [ 3 ]

1 голос
/ 21 июля 2011

Обновление: Я воспроизвел вашу проблему, пытаясь разобраться!

У меня не было лучшего способа, кроме как сбросить стиль в событии click

    private void toolStripButton1_Click(object sender, EventArgs e)
    {
        toolStripButton1.BackColor = Color.FromKnownColor(KnownColor.Control);
        toolStripButton1.Enabled = false;
    }

    private void toolStripButton1_MouseEnter(object sender, EventArgs e)
    {
        toolStripButton1.BackColor = Color.Red;
    }

    private void toolStripButton1_MouseLeave(object sender, EventArgs e)
    {
        toolStripButton1.BackColor = Color.FromKnownColor(KnownColor.Control);
    }

Надеюсь, это поможет!


Вы пробовали Control.Invalidate ()?

из MSDN: делает недействительной всю поверхность элемента управления и вызывает перерисовку элемента управления.

0 голосов
/ 22 января 2017

Перед отключением ToolStrip или ToolStripItem:

private void RemoveHighlightFromToolStrip(ToolStrip toolStrip)
        {
            foreach (ToolStripItem item in toolStrip.Items)
            {
                if (item.Pressed || item.Selected)
                {
                    item.Visible = false;
                    item.Visible = true;
                }
            }
        }

также вы можете просто скрыть и показать весь ToolStrip, но это может повлиять на другие элементы управления в вашей форме (т. Е. Если у вас есть какой-то закрепленный DataGridView, он будет перерисован)

0 голосов
/ 13 ноября 2015

У меня была такая же проблема. Я «исправил» его, скрыв и затем отобразив ToolStripButton, используя свойство Visible после завершения задачи.

...