3

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

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

我想做的是在 ToolStripButton 上“重置”其外观的一些方法。这样的方法甚至可能存在于 ToolStrip 上,但尽管搜索我一直找不到这样的东西。

作为替代方案,我可以直接在按钮上触发“鼠标离开”事件。据我所知,在 C# .NET 中无法轻松做到这一点。

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

4

3 回答 3

1

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

除了在点击事件中重置样式之外,我没有更好的方法

    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:使控件的整个表面无效并导致控件被重绘。

于 2011-07-20T23:53:59.950 回答
0

在禁用 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,它将被重绘)

于 2017-01-22T18:50:41.000 回答
0

我有同样的问题。我通过隐藏然后在任务完成后使用Visible属性显示 ToolStripButton 来“修复”它。

于 2015-11-13T20:40:54.637 回答