The site is currently in read-only mode for maintenance. Posting of new items will be available again shortly.
It is not possible to directly put a
ProgressBar or a button in a
StatusBar in VB.NET. Solutions are available for C++ or VB 5 or 6.0. This is a way to do it in VB.NET. The previous version of this article, called StatusProgressBar only allowed using a
ProgressBar. This new version extends the technique to any control.
Using the code
First, create a form with a
StatusBar and a
ProgressBar or any kind of control (tested with a button) you will put anywhere. You have to create at least a
Panel in the
StatusBar and make the
Panels visible (
.showpanels = True). The control put into the status bar will be called "child control".
Create an instance of
sbcProgressBar = New StatusBarChild(ProgressBar1, StatusBar1, 1)
The parameters are the
StatusBar1) and the number of the statuspanel (0 for the first one on the left). An optional parameter is the margin between the statuspanel's edges and the
ProgressBar is moved to the
StatusBar when you create the
StatusBarChild. You may put a button in the
StatusBar the same way:
sbcButton= New StatusBarChild(Button1, StatusBar1, 1)
StatusBarChild object's properties are the child control (.
.StatusBar), the panel number (.
Panel) and the margin (
.Margin). Its only method is
.Resize, you should call it when the parent form is resized. See the demo for details.
How it works
The child control is declared as an object:
Public ChildControl As Control
The child control's parent is first changed:
ChildControl.Parent = StatusBar
Then, it must be displayed in the proper panel. Since there is no property to get the
Panel's actual width, an API call is necessary.
SendMessage returns a
RECT value containing the coordinates of the
Private Structure RECT
Friend Left As Int32
Friend Top As Int32
Friend Right As Int32
Friend Bottom As Int32
Dim Rectangle As RECT
SendMessage(StatusBar.Handle.ToInt32, SB_GETRECT, Panel, Rectangle)
.Left = Rectangle.Left + Margin
.Top = Rectangle.Top + Margin
.Height = Rectangle.Bottom - Rectangle.Top - 2 * Margin
.Width = Rectangle.Right - Rectangle.Left - 2 * Margin
You may use this technique to put any kind of control into a
StatusBar, provided it has a .
The demo uses a button in the first panel, and a
ProgressBar in the second one. Click the button to make the bar progress.
Option Strict On allowed. See the first thread below.
- 1.0: First public version. Did not allow
Option Strict On.