有人可以帮我确定C#工具提示何时显示?

时间:2011-05-31 18:10:51

标签: c# winforms tooltip

我有一个在C#表单上运行的工具提示,我有一个复选框可以禁用它们。

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

其中Tool_Tips是全球公共布尔。

每次我将鼠标悬停在按钮上时,我都会使用代码:

private void Edge_Down_B_MouseHover(object sender, EventArgs e)
{
    if (Tool_Tips)
    {
        Tool_Tip(Tool_Help.Edge_Down, Edge_Down_B);
    }
}

我的问题是我有30个像30这样的按钮,无论布尔值如何都会显示工具提示。如果我在他们的代码中放置一个断点它可以正常工作,但是如果我删除断点,他们的工具提示会在它不应该出现时显示。我做了清理发布模式的构建,重建了项目并尝试了调试模式,他们不应该继续显示工具提示。

我甚至将这4个按钮的代码更改为:

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

并且它们仍然显示在正常运行模式下。如果我放置一个断点,他们就不会出现。

谁能告诉我为什么?

编辑: 如果我运行我的程序,它将启动工具提示禁用复选框已选中。我将取消选中该框,我将看到工具提示。如果我重新检查该框以禁用工具提示,我查看的工具提示即使被禁用也仍会显示。

1 个答案:

答案 0 :(得分:1)

首先,确保没有任何其他事件处理程序附加到这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方法的第一行。

让错误出现,你的断点被击中。 然后从调试菜单中打开调用堆栈并检查调用方法的位置。这可能会导致您遇到问题,因为我认为您的方法是从不需要的代码点调用的。