gpt4 book ai didi

c# - 禁用/启用表单时 ToolStripButton 仍然突出显示

转载 作者:太空宇宙 更新时间:2023-11-03 23:07:03 27 4
gpt4 key购买 nike

我有一个 WinForms 应用程序,其中包含一个带有 ToolStripButtons 的 ToolStrip。某些按钮操作会在按钮操作发生时禁用主窗体,并在完成后重新启用它。这样做是为了确保用户在操作发生时不会点击其他地方,并且还会显示 WaitCursor 但这与问题无关。

如果用户在禁用表单时单击按钮并将鼠标光标移出其边界,即使稍后重新启用表单,按钮仍会保持突出显示(透明蓝色)。如果鼠标随后进入/离开按钮,它会再次正确显示。

我可以通过使用以下代码显示 MessageBox 来人为地重现该问题(实际操作不显示消息框,而是打开一个新表单并填充一个网格,但最终效果是相同的)。

这里是复制问题的代码片段:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void toolStripButton1_Click(object sender, EventArgs e)
{
// Disable the form
Enabled = false;

// Some action where the user moved the mouse cursor to a different location
MessageBox.Show(this, "Message");

// Re-enable the form
Enabled= true;
}
}

最佳答案

我终于找到了解决办法。

我创建了这个扩展方法,它使用反射调用父工具条上的私有(private)方法“ClearAllSelections”:

    public static void ClearAllSelections(this ToolStrip toolStrip)
{
// Call private method using reflection
MethodInfo method = typeof(ToolStrip).GetMethod("ClearAllSelections", BindingFlags.NonPublic | BindingFlags.Instance);
method.Invoke(toolStrip, null);
}

并在重新启用表单后调用它:

private void toolStripButton1_Click(object sender, EventArgs e)
{
// Disable the form
Enabled = false;

// Some action where the user moved the mouse cursor to a different location
MessageBox.Show(this, "Message");

// Re-enable the form
Enabled= true;

// Hack to clear the button highlight
toolStrip1.ClearAllSelections();
}

关于c# - 禁用/启用表单时 ToolStripButton 仍然突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40851354/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com