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

.NET 的气球窗口

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (20投票s)

2002 年 8 月 3 日

CPOL

4分钟阅读

viewsIcon

329284

downloadIcon

7688

一个允许在 .NET 中创建气球状窗体的类

引言

这是 Joshua Heyer 的 Balloon Help 的 .NET 版本。最初,我尝试在 Josh 的 C++ 代码之上构建一个 .NET 包装器,但很快我意识到从头用 C# 重写一切有其优势。主要优势是设计器支持——窗体设计器实际上会在窗口中显示气球形状(如下图所示)。

在您的项目中,您可以选择:

  1. 使用继承自 BalloonWindow 的窗体。如果您想在气球窗口中添加自己的控件,这会很有用。
  2. 使用 BalloonHelp 类。它提供一个带有标题、内容、图标和关闭按钮的气球。这在功能上与 Josh 的原始气球帮助类似。

使用 BalloonWindow 类

如果您想创建自己的气球状窗口,可以继承此类。在 VS.NET 中,您可以像下面这样向项目中添加一个“继承的窗体”项来实现:

接下来,在 VS.NET 显示的“继承选择器”对话框中,选择 BalloonWindow 作为窗体的基类。

这将在设计器中显示一个气球形状的窗体,现在您可以像设计其他窗体一样设计它。Windows 窗体设计器会实际显示气球窗口。这是在任何设计器中都未曾有过的功能——无论是 VC6 的资源对话框编辑器还是 VB6 的窗体设计器。

BalloonWindow 类中唯一重要的属性是 AnchorPoint 属性。这是气球尾部固定到的点。该点始终以屏幕坐标表示。此属性可以在设计时或运行时,在气球显示之前或之后设置。在气球显示后设置此属性会自动将气球窗口移动到新的锚定点。以下代码片段演示了如何将气球锚定到点 (100, 100):

//My balloon form is a class derived from BallonnWindow
MyBalloonForm form = new MyBalloonForm(); 

form.AnchorPoint = new Point(100, 100);
form.Show();		

提供了一个静态方法 AnchorPointFromControl,用于计算控件中心点的屏幕坐标。BalloonWindow 类还提供了一个 ShowBalloon 方法,该方法内部使用 AnchorPointFromControl 来显示锚定到控件的气球。例如:

MyBalloonForm form = new MyBalloonForm(); 
form.ShowBalloon(textbox1); //Balloon will be anchored to textbox1
			

使用 BalloonHelp 类

BalloonHelp 类提供了 Josh 原始 C++ 气球帮助类的功能。此类具有以下附加属性:

  1. Captionstring
    这指定了气球标题的文本。这与基类 System.Windows.Forms.Control 的 Text 属性相同。
  2. CaptionFontSystem.Drawing.Font
    指定了气球标题的字体。如果未指定,则使用 Font 属性的粗体变体。
  3. Contentstring
    指定气球内容的文本。
  4. FontSystem.Drawing.Font
    Font 属性继承自 System.Windows.Forms.Control。它指定用于绘制内容的字体。
  5. ShowCloseButtonbool
    指示是否在气球的右上角显示关闭按钮。默认值为 false
  6. CloseOnDeactivatebool
    如果将此属性设置为 true,当用户切换到其他应用程序时,气球窗口将关闭。默认值为 true
  7. CloseOnMouseMovebool
    如果将此属性设置为 true,当鼠标移动时,气球窗口将关闭。默认值为 false
  8. CloseOnMouseClickbool
    如果将此属性设置为 true,当单击任何鼠标按钮时,气球窗口将关闭。默认值为 true
  9. CloseOnKeyPressbool
    如果将此属性设置为 true,当在键盘上按下按键时,气球窗口将关闭。默认值为 true
  10. EnableTimeoutbool
    有时,可能需要气球在特定间隔后自行关闭。如果将此属性设置为 true,则会发生这种情况。默认值为 false。
  11. Timeoutint
    这指定了气球自行关闭的间隔(以毫秒为单位)。默认值为 5000。
  12. IconSystem.Drawing.Icon
    此属性从 System.Windows.Forms.Form 继承,指定了要在气球左上角使用的图标。

下面是一些显示 BalloonHelp 窗口的示例代码。

BalloonHelp baloonHelp = new BalloonHelp();
		balloonHelp.ShowCloseButton = true;
		balloonHelp.Caption = "Sample Caption";
		balloonHelp.Content = "A multiline\r\ncontent";
		balloonHelp.CloseOnMouseClick = false;
		
balloonHelp.ShowBallon(textbox1);

结论

还有很多可以改进的地方。我计划添加以下一些功能:

  1. BallonErrorProvider 组件 - 类似于 .NET 中的标准 ErrorProvider 组件。
  2. BalloonHelpProvider 组件 - 类似于 .NET 中的标准 HelpProvider 组件。
  3. 可以在渲染代码上进行一些优化。
  4. 在设计器中调整大小时,气球会闪烁很多。这需要修复。

最后,感谢 Joshua Heyer 的 C++ 代码,它为本文的代码奠定了基础。

© . All rights reserved.