Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人能帮我确定为什么C#工具提示会在不应该显示的时候显示';T_C#_Winforms_Tooltip - Fatal编程技术网

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

有人能帮我确定为什么C#工具提示会在不应该显示的时候显示';T,c#,winforms,tooltip,C#,Winforms,Tooltip,我有在C#表单上运行的工具提示,我有一个复选框来禁用它们显示 private void checkBox1_CheckedChanged(object sender, EventArgs e) { if (checkBox1.Checked) { Tool_Tips = false; } else Tool_Tips = true; } 其中,Tool\u Tips是一个全球公共文件 每次将鼠标悬停在按钮上时,我都会使用以下代码:

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

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    if (checkBox1.Checked)
    {
        Tool_Tips = false;
    }
    else
        Tool_Tips = true;
}
其中,
Tool\u Tips
是一个全球公共文件

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

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);
    }
}
它们仍然以正常运行模式显示。如果我在中放置断点,它们将不会显示

谁能告诉我为什么

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

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

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

    private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        Application.DoEvents();
        Tool_Tips  = !checkBox1.Checked;
    }
在选中复选框之前,事件可能已被触发

如果这也不起作用,请在工具提示方法中写下:

if (checkbox1.Checked) return;
如果这些都没用,就开枪打我的头:D

在向我开枪之前,请执行以下操作: 在调试模式下,禁用(或删除)所有断点,并在工具提示方法的第一行中放置一个断点

让bug出现,你的断点就会被击中。
然后从debug菜单中,打开Call Stack并检查是否从调用方法的位置进行了调用。这可能会导致您出现问题,因为我认为您的方法是从一个不需要的代码点调用的。

您确定这不仅仅是上次设置它时(在清除复选框之前)的遗留问题吗?IIRC许多工具提示存储在已设置关键帧的集合中。如果你不清除这个,它们仍然被设置。我不确定。我所有的鼠标指针都调用了Tool_Tip(),这是我创建的一个函数:public void Tool_Tip(字符串帮助,按钮bt){if(Tool_Tips){ToolTip Tip=new ToolTip();Tip.ReshowDelay=0;Tip.InitialDelay=0;Tip.autocopdelay=0;Tip.AutomaticDelay=0;Tip.Show(help,bt,3000);}}这就是实际的显示。30一些按钮调用此命令,只有~4个按钮与iti添加的Tip.Dispose()有关;Tip.RemoveAll();在Tip.Show()之后,并没有停止它们。即使在我注释掉我的旧代码并设置工具_Tips=,它仍然在这样做!checkBox1.checked。我在if(checkBox1.checked)报税表中添加了;但我没有枪:Pit必须在某个地方记住它。如果我设置断点,它可以正常工作,但只是在调试或发布中运行,它们在启动时仍然显示复选框设置为选中,这意味着没有工具提示。没有工具提示出现。如果我取消选中该框,将显示工具提示,请更正。如果我再次检查该框,Tool_Tips变量为false,此时它会显示您添加的内容不正确id
Application.DoEvents()?是的。私有void checkBox1_CheckedChanged(对象发送方,事件参数e){Application.DoEvents();Tool_Tips=!checkBox1.Checked;//如果(checkBox1.Checked)//{////////////////////////Tool_Tips=true;}我注释掉了我的旧代码,并将新代码放在上面