ToolStripButton“重置外观”/“火灾事件”

时间:2011-07-20 23:50:22

标签: c# .net toolstrip

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

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

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

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

此时的任何建议都会受到赞赏,我自然不想撕掉我的应用程序并更换工具条。

3 个答案:

答案 0 :(得分: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的

:使控件的整个表面无效并导致重绘控件。

答案 1 :(得分:0)

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

答案 2 :(得分: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,它会被重绘)