【问题标题】:Tooltips won't show second time form is created工具提示不会在第二次创建表单时显示
【发布时间】:2009-08-24 15:58:11
【问题描述】:

我有一个弹出控件的对话框,当控件悬停在控件上时,会显示一个工具提示。但是,如果我关闭该框然后重新显示它,则没有工具提示将起作用。这是我的代码的一部分。当表单加载为空时,我正在初始化 tooltipOn。我已经完成了跟踪,并且 tooltip1.Show() 确实在第二次被调用时根本不会显示。知道为什么吗?

private void Panel1_MouseMove(object sender, MouseEventArgs e)
{
    Control ctrl = null;

    if (sender == Panel1)
        ctrl = ((Control)sender).GetChildAtPoint(e.Location);
    else
        ctrl = (Control)sender;

    if (ctrl != null)
    {
        if (tooltipOn != ctrl)
        {
            toolTip1.Show(toolTip1.GetToolTip(ctrl), ctrl, ctrl.Width / 2, ctrl.Height / 2);
            tooltipOn = ctrl;
        }
    }
    else
    {
        toolTip1.Hide(this);
        tooltipOn = null;
    }
}

【问题讨论】:

    标签: c# winforms tooltip


    【解决方案1】:

    可能是因为您不能在两个不同的控件上显示两次工具提示?

    在你的 if 语句中试试这个:

    if (tooltipOn != ctrl)
    {
        //your moving the tooltip to a different control, 
        //hide it from the other first.
        if (tooltipOn != null)
            toolTip1.Hide(tooltipOn);  
    
        toolTip1.Show(
            toolTip1.GetToolTip(ctrl), ctrl, ctrl.Width / 2, ctrl.Height / 2
        );
    
        tooltipOn = ctrl;
    }
    

    如果这不起作用,我会尝试完全更新一个完全不同的工具提示,以确保每个控件在活动期间都有自己的。

    【讨论】:

    • 这绝对有效!我仍然不确定到底发生了什么。你能解释一下为什么代码在我的表单第一次显示时有效,但第二次无效?
    • 其实你知道吗?这仅在我第一次显示表单时没有将鼠标悬停在控件上时才有效。
    • 我认为这与您尝试在多个控件中使用相同的工具提示有关。通常每个控件都有自己的工具提示。但是,您这样做的方式只创建一个工具提示(据我所知),然后只需将其移动到鼠标悬停的任何控件。
    • 是的,这是真的。但是,我有太多控件无法为每个控件提供自己的工具提示。我认为这更像是一个工具提示是错误的问题,而不是任何东西。这就是为什么我不明白为什么您的代码有效,因为当 if 语句被命中时 tooltipOn 已经为空。我尝试在关闭表单时隐藏每个 ctrl 的工具提示,并在控件 mouseEnter 事件上停用/激活工具提示。我最终得到的是奇怪的行为,其中工具提示会在悬停很长时间后一个一个地显示 - 有些比其他时间长。如果我能理解为什么它很奇怪......
    • 我要做的是为每个控件创建一个工具提示,并在鼠标移动时摆脱它们。过去我不得不在一个 winforms 项目上这样做,这有点棘手,但它可以工作并且它保持 UI 活泼。不过,您需要在事件中创建所有新的工具提示才能使其正常工作。
    【解决方案2】:

    好的...在为以后发现这篇文章有用的任何人解决这个问题后,将在下面发布。为什么这是必要的,我无法理解。

    改变

    toolTip1.Show(toolTip1.GetToolTip(ctrl), ctrl, ctrl.Width / 2, ctrl.Height / 2);
    

    toolTip1.Show(toolTip1.GetToolTip(ctrl), ctrl, ctrl.Width / 2, ctrl.Height / 2);
    toolTip1.Hide(ctrl);
    toolTip1.Show(toolTip1.GetToolTip(ctrl), ctrl, ctrl.Width / 2, ctrl.Height / 2);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 2013-02-27
      • 1970-01-01
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多