65.9K
CodeProject 正在变化。 阅读更多。
Home

将任何用户控件显示为弹出菜单

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.58/5 (48投票s)

2005年2月6日

2分钟阅读

viewsIcon

238884

downloadIcon

5999

本文介绍了一个小类,它允许您在 XP 样式弹出菜单中显示任何用户控件。

引言

我发现 .NET Framework 不提供自定义菜单令人沮丧。 我意识到你可以自行绘制菜单,但有时你只想做更多的事情。 我从这个小类开始,它最初用于在浮动窗口中显示 usercontrol。 现在,我对其进行了一些改进。

  1. 我希望我的弹出窗口出现在按钮的顶部(就像 Windows 中的“开始”菜单)。 但只有在有足够空间的情况下。
  2. 菜单显示阴影(见图片)。
  3. 菜单以快速且图形美观的动画显示。

与我在互联网上可以找到的内容相反,这个类允许您显示任何类型的控件。 无需从任何特殊类派生。 此外,弹出窗口将显示在您想要的位置,在屏幕上。 我使用了一个按钮,但您可以使用图像或您喜欢的任何东西。

使用代码

要尝试该类,只需运行提供的 Test 项目。 我试图保持这个类简单易用。 要在您自己的项目中使用它,您只需要两行代码。 首先,将 popup.vb 文件添加到您的项目中。

如果您希望在单击 button1 时显示 usercontrol1,您只需要这两行代码

Private Sub Button1_Click(ByVal sender As System.Object, 
   ByVal e As System.EventArgs) 
      _ Handles Button1.Click
 popup = New Popup(New UserControl1, Button1)
 popup.Show()
End Sub

默认情况下,弹出窗口将以动画形式显示,带有阴影和深灰色边框。

您可以根据需要更改这些设置。 请注意,此代码的阴影部分源自 David M. Kean 撰写的名为 向窗体添加阴影 的 C# 文章。 此功能(且仅此功能)仅在 Windows XP 上有效。

当窗口停用时,弹出窗口将自动消失。 当您单击弹出窗口外部时,窗口会立即停用。 该组件还提供两个事件 DropDownDropDownClosed。 您可以使用此类来初始化或保存您的用户控件值。

Private Sub PopupDown(ByVal Sender As Object, ByVal e As EventArgs) _
          Handles popup.DropDown
 Me.Text = "Popup is open"
 End Sub

 Private Sub PopupClosed(ByVal Sender As Object, ByVal e As EventArgs) _
          Handles popup.DropDownClosed
 Me.Text = "Popup is closed"
 End Sub

关注点

没有火箭科学,只是一个轻量级的小类。

弹出窗口的定位比我预期的要复杂,因此您不必考虑它。

历史

  • 2005 年 2 月 6 日 - 发布第一个版本
    • Resizable 选项的调整大小不是很平滑。 其余的似乎运行良好。
  • 2005 年 2 月 12 日
    • 弹出窗口不再出现在任务栏中(谢谢 steve)。
    • 用户控件现在可以阻止弹出窗口关闭(如果需要)。

许可证

本文没有明确的许可证附加到它,但可能包含在文章文本或下载文件本身中的使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.