工具条按钮"重置外观"/ "Fire Leave Event"

本文关键字:quot Fire Event Leave 外观 按钮 工具 | 更新日期: 2023-09-27 18:02:51

我有一个执行动作的ToolStripButton。用户单击按钮,按钮被禁用,以防止执行两次操作。操作完成后,按钮将重新启用。除了:

因为按钮是禁用的,所以它不会触发"MouseLeave"事件,因此按钮的外观没有更新。为了绝对清楚,当鼠标进入ToolStripButton时,按钮将以橙色高亮显示(默认情况下),周围有一个黑框。当我重新启用按钮时,此突出显示不会被删除。此时,鼠标光标早已离开了控件。鼠标移到按钮上,自然会通过重新绘制按钮来修复按钮。

我想做的是在ToolStripButton上"重置"其外观的一些方法。这样的方法甚至可能存在于工具条上,但是尽管搜索了,我还是找不到这样的东西。

作为一种选择,我可以直接触发按钮上的"Mouse Leave"事件。据我所知,在c# . net中没有办法轻松地做到这一点。

任何建议在这个时间点将是最感激的,当然我不想撕毁我的应用程序和更换工具条。

工具条按钮"重置外观"/ "Fire Leave Event"

更新:我重现了你的问题,试着弄清楚!

除了在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()了吗?

from MSDN:使控件的整个表面无效,并导致控件被重新绘制。

我也遇到了同样的问题。我"固定"它通过隐藏,然后显示回ToolStripButton使用可见属性后的任务完成。

在禁用ToolStrip或ToolStripItem之前:

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

你也可以隐藏和显示整个工具条,但这可能会影响你的窗体中的其他控件(即,如果你有一些停靠的DataGridView,它将被重新绘制)