vb.net入门StatusBar 控件
|
在Windows应用程序中,只向用户显示文字提示的控件有Label、LinkLabel以及StatusBar控件,我们把它们统称为显示文本的控件。上一章我们了解Label和LinkLabel控件(参看:vb.net入门Label和LinkLabel控件),这里我们就来了解下StatusBar控件。 在Windows应用程序的窗体中,StatusBar控件通常作为窗体中的一个区域显示在窗口的底部,用于显示程序的各种状态信息,我们称它为状态栏。如下图一所示:
StatusBar控件的基本组成单位是状态栏面板StatusBarPanel,用来显示状态的文本或图标,也可以用来显示指示进程正在执行的动画图标等。 一、向 StatusBar 控件添加面板 StatusBar 控件内的可编程区域由 StatusBarPanel 类的实例组成。添加这些实例的方式是:在设计时通过 StatusBarPanel 集合编辑器,在运行时通过向 StatusBarPanelCollection 类进行添加。 1、在设计时向状态栏添加面板 (1)、从工具箱中向窗体添加StatusBar控件,它在vb.net的工具箱中的图标如下图二所示:
(2)、在窗体上选中StatusBar1,从“属性”窗口中找到 Panels 属性,然后单击省略号按钮 () 打开“StatusBarPanel 集合编辑器”。如下图三所示:
(3)、使用“添加”和“移除”按钮分别向 StatusBar 控件添加面板和从中移除面板。在右侧窗格中出现的属性窗口中配置单个面板的属性。单击“确定”关闭对话框并创建指定的面板。 (4)、在“属性”窗口中,将 ShowPanels 属性设置为 True,这样才能在控件上显示我们创建的面板,否则只显示StatusBar 控件的Text属性。 (5)、下面StatusBarPanel的属性说明: 属性 说明 (1)、在窗体中添加一个StatusBar控件,一个Button按钮 (2)、在Button按钮的Click事件中添加如下代码: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click StatusBar1.Panels.Add("面板一") StatusBar1.Panels.Add("面板二") StatusBar1.Panels.Add("面板三")
StatusBar1.Panels(0).AutoSize = StatusBarPanelAutoSize.Spring StatusBar1.Panels(1).AutoSize = StatusBarPanelAutoSize.Contents StatusBar1.Panels(2).AutoSize = StatusBarPanelAutoSize.Contents "设置面板的样式 StatusBar1.Panels(0).BorderStyle = StatusBarPanelBorderStyle.Raised StatusBar1.Panels(1).BorderStyle = StatusBarPanelBorderStyle.Sunken StatusBar1.Panels(2).BorderStyle = StatusBarPanelBorderStyle.Raised "为面板三添加图标 StatusBar1.Panels(2).Icon = New System.Drawing.Icon(System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal) & "Icon.ico") "让状态栏显示面板 StatusBar1.ShowPanels = True End Sub (3)、运行后,单击按钮,效果如下图所示:
二、确定单击了StatusBar 控件中的哪个面板 若要通过对 StatusBar 控件进行编程来响应用户的单击操作,我们可以使用 PanelClick 事件中的 Select Case 语句。该事件包含一个参数(面板参数),该参数包含对单击的 StatusBarPanel 对象的引用。使用该引用可以确定单击的面板的索引,从而可以相应地进行编程。 在前面例子的基础上,我们在StatusBar1控件的PanelClick事件中添加如下代码: Private Sub StatusBar1_PanelClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.StatusBarPanelClickEventArgs) Handles StatusBar1.PanelClick Select Case StatusBar1.Panels.IndexOf(e.StatusBarPanel) Case 0 MessageBox.Show("你单击了面板一") Case 1 MessageBox.Show("你单击了面板二") Case 2 MessageBox.Show("你单击了面板三") End Select End Sub 现在运行,先按Button1按钮创建状态的三个面板,然后单击某个面板,看看是不是响应了我们的单击事件了呢。如下图五所示:
三、创建一个能像VB6的StatusBar控件的StatusBar控件效果 用过vb6中StatusBar控件的朋友一定知道,它的StatusBar控件可以让我们在创建面板的时候选择是否让某个面板显示键盘上的CAPS LOCK、NUM LOCK 或 SCROLL LOCK 之类的键是否按下了,还可以选择在面板上显示时间。现在vb.net中的StatusBar控件就没有这样的功能了,用起来很麻烦,其实我们可以自己做出这样的效果来。 对于在StatusBar控件中显示时间的问题,我们可以通过一个Timer1控件来完成。 对于指示CAPS LOCK、NUM LOCK 或 SCROLL LOCK ,我们可以通过向窗体添加消息筛选器来实现。 首先在窗体中添加一个StatusBar控件、一个timer控件,完整代码如下: Public Class Form1 Inherits System.Windows.Forms.Form Implements IMessageFilter Public Const WM_KEYUP As Integer = &H101 Public Declare Function GetKeyState Lib "user32" Alias "GetKeyState" (ByVal nVirtKey As Integer) As Integer Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Application.AddMessageFilter(Me) "添加4个panel Me.StatusBar1.Panels.Clear() Me.StatusBar1.Panels.Add("Cap State") Me.StatusBar1.Panels.Add("Num") Me.StatusBar1.Panels.Add("Scroll") Me.StatusBar1.Panels.Add("Now") Me.StatusBar1.ShowPanels = True Timer1.Interval = 500 Timer1.Enabled = True "初始化状态 ToggleVirtualKeyStae() End Sub Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage Select Case m.Msg Case WM_KEYUP ToggleVirtualKeyStae() End Select Return False End Function Sub ToggleVirtualKeyStae() If GetKeyState(Keys.CapsLock) = 1 Then Me.StatusBar1.Panels(0).Text = "Cap" Else Me.StatusBar1.Panels(0).Text = "" End If If GetKeyState(Keys.NumLock) = 1 Then Me.StatusBar1.Panels(1).Text = "NUM" Else Me.StatusBar1.Panels(1).Text = "" End If If GetKeyState(Keys.Scroll) = 1 Then Me.StatusBar1.Panels(2).Text = "SCROLL" Else Me.StatusBar1.Panels(2).Text = "" End If End Sub Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Activated ToggleVirtualKeyStae() End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Me.StatusBar1.Panels(3).Text = Now.ToString End Sub 运行,效果如下图所示:
按Caps Lock、Num Lock、Scroll Lock等键,指示灯亮的时候状态栏中就有对应的指示了。 因为很多内容涉及到较深的知识我们就不做进一步阐述了,关于消息筛选器的知识你可以参看这里:用ImessageFilter实现截获键盘动作http://www.qqread.com/aspdotnet/d512187002.html。 关于Timer控件的更多内容请关注下一篇:vb.net入门Timer 控件 源代码网供稿. |





