有人能帮我确定为什么C#工具提示在应该显示的时候显示吗;t

本文关键字:显示 候显示 工具提示 为什么 | 更新日期: 2023-09-27 17:58:01

我有在C#窗体上运行的工具提示,并且我有一个复选框来禁用它们的显示。

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    if (checkBox1.Checked)
    {
        Tool_Tips = false;
    }
    else
        Tool_Tips = true;
}

其中CCD_ 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个按钮将显示工具提示,而不管布尔值是多少。如果我在他们的代码中放了一个断点,它会正常工作,但如果我删除了断点,他们的工具提示会在不应该出现的时候出现。我清理了发布模式的构建,重新构建了项目,并尝试了调试模式,当他们不应该时,他们会继续显示工具提示。

我甚至把这4个按钮的代码改成了

private void BlackandWhite_B_MouseHover(object sender, EventArgs e)
{
    if (Tool_Tips)
    {
        if (!checkBox1.Checked)
            Tool_Tip(Tool_Help.BlackWhite, BlackandWhite_B);
    }
}

并且它们仍然以正常运行模式出现。如果我在.中放置断点,它们就不会出现

有人能告诉我为什么吗?

编辑:如果我运行我的程序,它将以禁用工具提示并选中复选框开始。我将取消选中该框,然后我将看到工具提示。如果我重新检查该框以禁用工具提示,则我查看过的工具提示仍然会显示,即使它们已被禁用。

有人能帮我确定为什么C#工具提示在应该显示的时候显示吗;t

首先,确保这4个按钮的Click没有附加任何其他事件处理程序。

之后尝试将您的方法更改为:

    private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        Application.DoEvents();
        Tool_Tips  = !checkBox1.Checked;
    }

在选中复选框之前,事件可能已经被激发。

如果这也不起作用,请在Tool_Tip方法中写入:

if (checkbox1.Checked) return;

如果这些都无济于事,就朝我的脑袋开一枪:D!

在射杀我之前,请执行以下操作:在调试模式下,禁用(或删除)所有断点,并在Tool_Tip方法的第一行中放置一个断点。

让bug显示出来,并命中断点。然后从debug菜单中,打开Call Stack并检查从哪里调用了方法。这可能会导致问题,因为我认为您的方法是从不需要的代码点调用的。