无法隐藏工具提示

Posted

技术标签:

【中文标题】无法隐藏工具提示【英文标题】:Can't hide ToolTip 【发布时间】:2017-06-27 23:17:51 【问题描述】:

我通过在 HelpRequested 事件中包含以下代码为文本框创建了一个工具提示。

ToolTip^ toolTip_patterns = gcnew ToolTip;
String^ caption;

caption = "Help the user blah blah...";
toolTip_patterns->Show(caption, this->textBox_patternsTer);

我希望当用户离开文本框时工具提示消失。除非用户再次按 F1,否则不应显示它。我尝试在 Leave 事件中使用下面的代码隐藏工具提示。

ToolTip^ toolTip_patterns = gcnew ToolTip;
toolTip_patterns->RemoveAll();

上面的不起作用,所以我尝试了以下。这也不起作用。

toolTip_patterns->Hide(this->textBox_patternsTer);

当我使用任一方法(RemoveAll 或 Hide)时,工具提示会在用户离开文本框时消失,但当他们将鼠标悬停在文本框上时它会返回。我在 MouseHover 事件中没有任何代码。为什么会这样?

谢谢!


更新...抱歉,如果这不是输入更新的正确位置。

感谢您的建议,但它不起作用。我从表单设计器向我的表单添加了一个 ToolTip 控件,现在我的每个控件在 toolTip_patterns 上都有一个名为 ToolTip 的属性。我从 HelpRequest 事件中删除了以下声明。

ToolTip^ toolTip_patterns = gcnew ToolTip 

我用下面的代码设置了要显示的文本。

private: System::Void textBox_patterns_HelpRequested(System::Object^  sender, System::Windows::Forms::HelpEventArgs^  hlpevent)
     
        String^ caption;
        String^ module;

        if (sender == textBox_patternsTer)
            module = "Terminator";
        else if (sender == textBox_patternsSec)
            module = "Secondary";
        else if (sender == textBox_patternsPri)
            module = "Primary";
        else
            return; // No help for selected control.

        caption = "Enter 32 bit Hex patterns for the " + module + " one pattern per line.\n";

        toolTip_patterns->InitialDelay = 0; //< immediately show help
        toolTip_patterns->Show(caption, (TextBox^)sender);

我也尝试了下面的非模态形式。

        toolTip_patterns->SetToolTip((TextBox^)sender, caption);

工具提示显示正常,当我将焦点移动到另一个控件并按 F1 时,会显示第二个控件的工具提示。问题是当我将鼠标悬停在第一个控件上时,会显示第一个控件的工具提示。我不希望在用户退出控件后显示工具提示。 Hide() 方法不起作用,RemoveAll() 方法不起作用,将标题设置为“”也不起作用。知道我做错了什么吗?谢谢。

【问题讨论】:

【参考方案1】:

我倾向于在用户请求帮助时设置文本,然后在鼠标离开时清除它。

请注意,您需要在帮助请求调用和鼠标离开之间保留一个指向工具提示的指针,而不是在每次调用请求帮助时分配一个新的。如果您不这样做,您将没有对象的句柄并且无法对其进行操作。

ToolTip^ toolTip_patterns = gcnew ToolTip;

void doHelpRequest()

    String^ caption;

    caption = "Help the user blah blah...";
    toolTip_patterns->Show(caption, this->textBox_patternsTer)
    toolTip_patterns->InitialDelay = 0; //< immediately show help

然后

void doMouseLeave()

    toolTip_patterns->Show("", this->textBox_patternsTer)

【讨论】:

我通过将我的代码移动到 MouseEnter 事件来让它工作。我不知道为什么它在 HelpRequested 事件中表现不同,但我很喜欢这个解决方案。我使用了你的建议工具Tip_patterns->Show("", (TextBox^)sender);在 MouseLeave 事件中。非常感谢您的帮助!

以上是关于无法隐藏工具提示的主要内容,如果未能解决你的问题,请参考以下文章

PS 不能使用移动工具 因为目标图层被隐藏怎么办

引导工具提示不应隐藏或消失在专注于工具提示内容

当用户专注于工具提示内容时,不要隐藏引导工具提示

Highcharts 可拖动点 - 防止隐藏工具提示

工具提示隐藏在表格标题后面

Highcharts 工具提示溢出被隐藏