【问题标题】:Balloon pop up over control mouse enter/exit气球弹出控制鼠标进入/退出
【发布时间】:2012-10-30 19:16:18
【问题描述】:

你好,

上面是我正在编写的程序。在右侧面板上基本上是我创建的两个自定义控件(蓝色矩形区域),并在此 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 应用程序完成吗?我环顾四周,发现了 Tooltip 类,但到目前为止,我不知道它是否符合我的要求。

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

这可以吗?如果您能指出任何解决方法(如果有的话),我将不胜感激。

【问题讨论】:

  • 可以完成......但我相信,如果没有一些重要的工作,它就不会发生。我最近为工作编写了一个非模态的Notification 类,它几乎可以做到这一点,但这需要一些努力。它基本上可以归结为定义一个新的“表单”并使用一些属性使其显示阴影,而不是绘制焦点等。

标签: c# winforms


【解决方案1】:

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

创建自定义弹出表单

您想要的本质上是一个出现在您的表单上的浮动弹出窗口,这意味着您需要定义一个新的 Form 对象,而不是 UserControl,因为它实际上不会嵌入到您的其他形式。

给它一个多行、不可编辑的文本框,您可以在其中填写您想要填充的信息,然后只需在您的 Mouse_Enter 事件中调用表单的新实例。在Mouse_Leave 上关闭它。

调整样式

您将不得不对其进行一些操作,以使其实际上像一个弹出窗口而不仅仅是一个窗口。我建议将其设置为非模态弹出窗口,并删除边框。您可以编写一个函数来自动调整其大小。我不认为您会希望用户手动调整它的大小。

要研究的其他一些事情是覆盖基本 Form 对象附带的 CreateParams 属性。您可以强制 DropShadowsTopMost 表单而不使表单成为模态。覆盖 ShowWithoutActivation 以始终返回 true 将防止表单在弹出时窃取焦点。

我不确定您是否可以像样机中那样拉出圆形边缘。也许你可以通过 OnPaint() 函数中的一些魔法来完成它,但我无法告诉你如何去做。


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

示例

在相关搜索中要查找的一些关键字是 Toast NotificationNon-Modal Popup。这可能有点用处:
http://www.codeproject.com/Articles/442983/Android-Style-Toast-Notification-for-NET

【讨论】:

  • 感谢 Brad 和 KChaloux,我认为您的建议慢慢地为我指明了正确的方向。然而,我不得不让我的生活变得更加困难......那就是我希望这个浮动弹出窗口跟随鼠标在控制区域内的任何地方。我想我必须做这个事件来跟踪鼠标移动事件,然后如果它仍然在该区域内然后重绘浮动窗口位置.....嗯会很有趣,我会先尝试并更新任何结果我会上来的。
【解决方案2】:

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

如果您不确定如何制作带圆角的矩形,您可以使用图形对象即时制作(将在屏幕上变成位图),也可以按照您希望的方式制作GIMP(或 Photoshop,如果有的话)然后使用该图像作为用户控件的背景。使默认背景透明(因此圆角上方的空隙不是灰色的)。如果你制作了一个预加载的图像,你需要知道你只能在 Y 和 X 方向上等量缩放它。不等比例会使它看起来失真。

【讨论】:

    【解决方案3】:

    可以在控件上使用 Mouse_Enter 事件吗?

    【讨论】:

    • 我知道这些事件,我不担心它们。我的主要问题是我不知道如何建立一个像上面的气球这样的控件来连接 Mouse_Enter 和 Mouse_Exit 事件。
    猜你喜欢
    • 2011-06-09
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 2011-07-25
    • 1970-01-01
    相关资源
    最近更新 更多