C# 气球弹出控制鼠标进入/退出

C# 气球弹出控制鼠标进入/退出,c#,winforms,C#,Winforms,你好, 上面是我正在写的程序。右侧面板上基本上是我创建的两个自定义控件(蓝色矩形区域),并在加载此winform程序时将它们作为控件添加到背景面板控件中 我使用MS paint绘制了鼠标进入该控件区域时希望看到的弹出气球。我想做以下工作: 1. If mouse enter the control area, the yellow area balloon pop up and populate with the information of that specific control

你好,

上面是我正在写的程序。右侧面板上基本上是我创建的两个自定义控件(蓝色矩形区域),并在加载此winform程序时将它们作为控件添加到背景面板控件中

我使用MS paint绘制了鼠标进入该控件区域时希望看到的弹出气球。我想做以下工作:

   1.  If mouse enter the control area, the yellow area balloon pop up and populate with the information of that specific control
   2.  If mouse move out of the control area, the pop up balloon disappear.
这可以通过Winform应用程序完成吗?我环顾四周,发现了
工具提示
类,但到目前为止,我还不知道它是否符合我的要求

我可能错了,但谷歌搜索给我留下的印象是,工具提示在风格方面提供的东西很少。理想情况下,我想让这个弹出气球几乎像一个无边框的弹出窗口,在那里我可以随意放置图像、字体等。如果您将鼠标悬停在按钮或特定字段上,而我想要整个控制区域,则工具提示也会起作用


这能做到吗?如果有任何解决方法,请告诉我,我将不胜感激。

您可以在控件上使用鼠标输入事件吗?

由于您已经实现了自定义用户控件,您可能希望重试。制作一个样式和颜色相同的控件,根据文本更改其大小。可以从现有用户控件对象向其提供信息(例如要显示的文本)。您还可以将鼠标输入/离开代码驻留在第一个用户控件中


如果您不确定如何制作圆角矩形,可以使用图形对象(将在屏幕上变成位图)即时制作,也可以在GIMP(或photoshop,如果有的话)中按照您希望的方式制作,然后将该图像用作用户控件上的背景。使默认背景透明(使圆角上方的空隙不是灰色)。如果你制作一个预加载的图像,你需要意识到你只能在Y和X方向上均匀地缩放它。不相等的缩放比例将使其看起来扭曲

我写了一条评论,但我想我会把它扩展成一个完整的答案。这是假设您想要一个新控件,而不是工具提示,以实现最大的可定制性。我最近在工作中做了类似的事情,作为一个非模态信息弹出窗口,当点击时消失

创建自定义弹出窗体 实际上,您需要的是一个出现在表单上的浮动弹出窗口,这意味着您需要定义一个新的
表单
对象,而不是
用户控件
,因为它实际上不会嵌入到其他表单中

给它一个多行、不可编辑的文本框,你可以用你想要填充的信息来填充它,然后在你的
Mouse\u Enter
事件中调用表单的一个新实例。鼠标离开时关闭它

调整风格 你必须玩一下它,让它真正像一个弹出窗口,而不仅仅是一个窗口。我建议将其设置为非模式弹出窗口,并删除边框。您可以编写一个函数,根据其内容自动调整其大小。我想你不会希望用户手动调整它的大小

其他一些需要研究的问题是重写基本表单对象附带的
CreateParams
属性。您可以强制
DropShadows
TopMost
表单,而无需使表单处于模式。覆盖
ShowWithoutActivation
始终返回true将防止窗体在弹出时窃取焦点

我不确定你是否能像你的模型一样把圆边去掉。也许您可以通过OnPaint()函数中的一些技巧来实现,但我无法告诉您如何实现


摆弄它可能有点痛苦,但您可以从中获得一些良好的功能和外观。如果你认为你可以通过ToolTip类来实现它,那就去做吧。我花了大约一周的时间在我想要的地方得到通知(尽管我添加了一些你可能不需要担心的功能)

例子 在相关搜索中要查找的一些关键字将是
Toast通知
非模式弹出窗口
。这可能有些用处:

可以这样做。。。但我相信,不是没有一些重要的工作。我最近写了一个非模态的
通知
类来完成这项工作,但这需要一些努力。它基本上可以归结为定义一个新的“形式”,并使用一些属性使其显示dropshadow,而不是绘制焦点,等等。我知道这些事件,我不担心它们。我的主要难点是我不知道如何建立一个像上面气球一样的控件来连接鼠标进入和鼠标退出事件。感谢Brad和KChaloux,我认为你的建议慢慢地为我指明了正确的方向。然而,我不得不让我的生活变得更加艰难。。也就是说,我希望这个浮动弹出窗口跟随鼠标在控制区域内的任何位置。我想我必须做的事件,以跟踪鼠标移动事件,然后如果它仍然在该区域内,然后重新绘制浮动窗口的位置。。。。。嗯,会很有趣的,我会先尝试一下,然后更新任何结果。