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

用于将 ProgressBar 或任何控件放入 StatusBar 的类

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.76/5 (26投票s)

2004年1月29日

CPOL

2分钟阅读

viewsIcon

108711

downloadIcon

1840

如何在程序的 StatusBar 中简单地显示一个控件。

引言

在 VB.NET 中,不可能直接将 ProgressBar 或按钮放入 StatusBar 中。 C++ 或 VB 5 或 6.0 有可用的解决方案。 这是在 VB.NET 中实现此目的的一种方法。 这篇文章的先前版本,名为StatusProgressBar,只允许使用ProgressBar。 这个新版本将该技术扩展到任何控件。

使用代码

首先,创建一个包含 StatusBarProgressBar 或任何类型的控件(经过按钮测试)的窗体,您将把它们放在任何地方。 您必须在 StatusBar 中创建至少一个 Panel 并使 Panel 可见 (.showpanels = True)。 放入状态栏的控件将被称为“子控件”。

创建 StatusBarChild 的一个实例

sbcProgressBar = New StatusBarChild(ProgressBar1, StatusBar1, 1)

参数是 ProgressBar (ProgressBar1)、StatusBar (StatusBar1) 和状态面板的编号(左侧第一个为 0)。 一个可选参数是状态面板的边缘和 ProgressBar 之间的边距。 创建 StatusBarChild 时,ProgressBar 会被移动到 StatusBar。 您可以用同样的方式把一个按钮放入 StatusBar

sbcButton= New StatusBarChild(Button1, StatusBar1, 1)

StatusBarChild 对象的属性是子控件(.ChildObject),StatusBar.StatusBar),面板编号(.Panel)和边距(.Margin)。 它唯一的方法是 .Resize,您应该在父窗体大小调整时调用它。 有关详细信息,请参见演示。

工作原理

子控件被声明为一个对象

Public ChildControl As Control

首先更改子控件的父级

 ChildControl.Parent = StatusBar

然后,必须在适当的面板中显示它。 由于没有属性来获取 Panel 的实际宽度,因此必须进行 API 调用。 SendMessage 返回一个 RECT 值,其中包含 Panel 的坐标。

Private Structure RECT
  Friend Left As Int32
  Friend Top As Int32
  Friend Right As Int32
  Friend Bottom As Int32
End Structure
Dim Rectangle As RECT
' Use the API to get the panel's display rectangle
SendMessage(StatusBar.Handle.ToInt32, SB_GETRECT, Panel, Rectangle)
' Resize
With ProgressBar
  .Left = Rectangle.Left + Margin
  .Top = Rectangle.Top + Margin
  .Height = Rectangle.Bottom - Rectangle.Top - 2 * Margin
  .Width = Rectangle.Right - Rectangle.Left - 2 * Margin
End With

只要它具有 .parent 属性,您就可以使用此技术将任何类型的控件放入 StatusBar 中。

演示在第一个面板中使用一个按钮,在第二个面板中使用一个 ProgressBar。 单击该按钮以使进度条前进。

历史

  • 1.1: 允许 Option Strict On。 请参阅下面的第一个线程。
  • 1.0:第一个公共版本。 不允许 Option Strict On
© . All rights reserved.