大家好。需要制作替代版本的ToolTip. 选择WebBrowser第二种形式。这样的任务,鼠标悬停在Textboxin上,form1应该会出现Form2,上面也有一样的WebBrowser。但是问题是,鼠标移到Textboxin上Form1,Form2应该会跟着。但是Form1每次出现时它都会开始闪烁Form2。如何Form1让它出现时不闪烁Form2?
Form2 form2;
private void Texbox1_MouseEnter_1(object sender, EventArgs e)
{
form2 = new form2();
form2.show(Texbox1);
}
private void Texbox1_MouseLeave_1(object sender, EventArgs e)
{
f2.Close();
}
您不需要每次都创建 (
new) 和销毁 ( ) 表单Close- 这太昂贵了。创建一次第二个窗体(例如,在主窗体的构造函数中)并在适当的时候显示隐藏。为此,请将以下事件处理程序设置为文本框:
的确,这里有一个缺点:如果在显示工具提示窗体时停用主窗体(例如,按 Atl + Tab 或弹出另一个应用程序窗口),那么我们的工具提示将不会隐藏。我认为这并不可怕:只需将鼠标移到文本框上即可。
要消除这个缺陷,可以使用计时器,但这在某种程度上也是不合常理的。
一般来说,使用表单作为工具提示太重了。另外,正是由于表单具有(去)激活的能力,才出现了正确显示两者的问题。
拿
Panel(或任何其他容器组件)就足够了,把你需要的一切(WebBrowser或RichTextBox)放在上面。最初,将此面板的属性设置为Visible = false(隐藏)。面板的父级必须是主窗体本身 (Parent = this)。这个面板需要放在所有其他面板的前面,所以调用它上面的方法panel.BringToFront();事件处理程序中的代码几乎相同:
并且我们还需要添加对主窗体的停用事件的处理:
我们的工具提示面板将正确隐藏。