有人可以帮助我确定为什么C#工具提示在不应该显示的情况下显示吗?

问题描述

| 我有在C#表单上运行的工具提示,并且我有一个复选框来禁止它们显示
private void checkBox1_CheckedChanged(object sender,EventArgs e)
{
    if (checkBox1.Checked)
    {
        Tool_Tips = false;
    }
    else
        Tool_Tips = true;
}
其中“ 1”是全球公共场所。 每次将鼠标悬停在按钮上时,我都会使用以下代码
private void Edge_Down_B_MouseHover(object sender,EventArgs e)
{
    if (Tool_Tips)
    {
        Tool_Tip(Tool_Help.Edge_Down,Edge_Down_B);
    }
}
我的问题是我有30个类似的4个按钮,无论布尔值如何,都会显示工具提示。如果我在他们的代码添加一个断点,则它可以正常工作,但是如果我删除了断点,则它们的工具提示将在该提示时出现。我做了干净的发布模式构建,重建了项目并尝试了调试模式,当他们不应该使用它们时,它们会继续显示工具提示。 我什至将这四个按钮的代码改为:
private void BlackandWhite_B_MouseHover(object sender,EventArgs e)
{
    if (Tool_Tips)
    {
        if (!checkBox1.Checked)
            Tool_Tip(Tool_Help.BlackWhite,BlackandWhite_B);
    }
}
并且它们仍以正常运行模式显示。如果我放置断点,它们将不会显示。 谁能告诉我为什么? 编辑: 如果我运行我的程序,它将以选中的复选框禁用工具提示开始。我将取消选中该框,然后会看到工具提示。如果我重新选中该框以禁用工具提示,即使已禁用,我查看的工具提示仍会显示。     

解决方法

        首先,请确保没有其他事件处理程序附加到这4个按钮上。 之后,尝试将您的方法更改为:
    private void checkBox1_CheckedChanged(object sender,EventArgs e)
    {
        Application.DoEvents();
        Tool_Tips  = !checkBox1.Checked;
    }
在选中此复选框之前,事件可能已经触发。 如果还是不行,请在您的Tool_Tip方法内编写:
if (checkbox1.Checked) return;
如果这些都没有帮助,请把我开枪打死:D! 在拍摄我之前,请执行以下操作: 在调试模式下,禁用(或删除)所有断点,然后在Tool_Tip方法的第一行中放置一个。 使错误显示出来并击中您的断点。 然后从调试菜单中打开“调用堆栈”,并检查从何处调用了您的方法。这可能会导致您遇到问题,因为我认为您的方法是从不需要的代码点调用的。