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






4.58/5 (48投票s)
2005年2月6日
2分钟阅读

238884

5999
本文介绍了一个小类,它允许您在 XP 样式弹出菜单中显示任何用户控件。
引言
我发现 .NET Framework 不提供自定义菜单令人沮丧。 我意识到你可以自行绘制菜单,但有时你只想做更多的事情。 我从这个小类开始,它最初用于在浮动窗口中显示 usercontrol
。 现在,我对其进行了一些改进。
- 我希望我的弹出窗口出现在按钮的顶部(就像 Windows 中的“开始”菜单)。 但只有在有足够空间的情况下。
- 菜单显示阴影(见图片)。
- 菜单以快速且图形美观的动画显示。
与我在互联网上可以找到的内容相反,这个类允许您显示任何类型的控件。 无需从任何特殊类派生。 此外,弹出窗口将显示在您想要的位置,在屏幕上。 我使用了一个按钮,但您可以使用图像或您喜欢的任何东西。
使用代码
要尝试该类,只需运行提供的 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 上有效。
当窗口停用时,弹出窗口将自动消失。 当您单击弹出窗口外部时,窗口会立即停用。 该组件还提供两个事件 DropDown
和 DropDownClosed
。 您可以使用此类来初始化或保存您的用户控件值。
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)。
- 用户控件现在可以阻止弹出窗口关闭(如果需要)。
许可证
本文没有明确的许可证附加到它,但可能包含在文章文本或下载文件本身中的使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。