我有一个执行操作的ToolStripButton。用户单击该按钮并禁用该按钮以防止执行两次操作。操作完成后,将重新启用该按钮。这一切都很完美......除了:
由于该按钮被禁用,因此不会触发“MouseLeave”事件,因此不会更新按钮的外观。要绝对清楚,当鼠标进入ToolStripButton时,按钮会以橙色突出显示(默认情况下),并在其周围显示黑框。重新启用按钮时,不会删除此突出显示。到目前为止,鼠标光标已远离控件。将鼠标悬停在按钮上会自然地通过重新绘制按钮来修复按钮。
我想要做的是ToolStripButton上的一些“重置”其外观的方法。这样的方法甚至可能存在于ToolStrip上,但是尽管搜索我还是找不到这样的东西。
作为替代方案,我可以直接在按钮上触发“鼠标离开”事件。据我所知,在C#.NET中无法轻易做到这一点。
此时的任何建议都会受到赞赏,我自然不想撕掉我的应用程序并更换工具条。
答案 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,它会被重绘)