什么是随心所欲 随心所欲绘制状态栏
随心所欲绘制状态栏
状态栏我不想详细解释 控件非常容易用 StatusBar和StatusBarPanel配合使用 非常简单 但是这样只是满足了基本的状态栏功能的需要 很多的时候我们可能还需要个性化的状态栏 我们需要随心所欲的绘制它 要做到这一点不难 StatusBarPanel类提供了Style属性 将其设置为StatusBarPanelStyle OwnerDraw就可以自己编写代码绘制它了 StatusBar的DrawItem事件当所有者描述的状态栏控件的可视特征发生变化时 发生此事件 在这个事件里安置绘制StatusBarPanel的程序代码
StatusBarPanelStyle枚举可以决定StatusBarPanel是由系统绘制还是由程序员亲自编写程序进行绘制 有两种选择Text和OwnerDraw 前者要求StatusBarPanel按照标准字体显示文本 后者允许程序员自己写代码绘制StatusBarPanel 默认情况下是Text
以下代码片断自行绘制StatusBarPanel
在一个窗体上添加一个状态栏 将其ShowPanels属性设置为true 然后 对其Panels属性进行设置 添加 个StatusBarPanel 其中第二个的Style属性设置为Text 其余两个的Style设置为OwnerDraw
Private Sub StatusBar _DrawItem(ByVal sender As Object ByVal sbdevent As System Windows Forms StatusBarDrawItemEventArgs) Handles StatusBar DrawItem
Dim g As Graphics = sbdevent Graphics
Dim rf As New RectangleF(sbdevent Bounds X sbdevent Bounds Y _
sbdevent Bounds Width sbdevent Bounds Height)
If (sbdevent Index = ) Then
g FillRectangle(Brushes Red rf)

Dim f As New Font( ËÎÌå )
Dim b As Brush = Brushes Black
g DrawString(sbdevent Panel Text f b rf)
End If
If (sbdevent Index = ) Then
g FillRectangle(Brushes Red rf)
Dim f As New Font( ËÎÌå )
Dim b As Brush = Brushes Black
g DrawString(sbdevent Panel Text f b rf)
End If
End Sub
需要特别强调一下参数 System Windows Forms StatusBarDrawItemEventArgs 该类型的参数包含一个与DrawItem事件相关的数据 详见下表
BackColor
获取所绘制的项的背景色
Bounds
获取表示所绘制项的边界的矩形
Font
获取分配给所绘制项的字体
ForeColor
获取所绘制项的前景色
Graphics
获取要在其上绘制项的图形表面
Index
获取所绘制项的索引值
Panel
获取要绘制的StatusBarPanel
State
获取所绘制项的状态
如何让状态条右下角的三角消失呢?
将statusBar SizingGrip属性设置为false
如何让状态栏不显示其StatusBarPanel?
把statusBar的ShowPanel属性设置为false
怎样在程序运行过程中向状态条添加(删除)面板?
使用StatusBar的Panels属性
Private Sub btnAddPanel_Click(ByVal sender As System Object ByVal e As System EventArgs) Handles btnAddPanel Click
Dim panel As New StatusBarPanel
panel Text = 动态添加的面板!
Me StatusBar Panels Add(panel)
End Sub
Private Sub btnDelPanel_Click(ByVal sender As System Object ByVal e As System EventArgs) Handles btnDelPanel Click
Dim str As String = 动态添加的面板!
Dim panel As StatusBarPanel
For Each p As StatusBarPanel In Me StatusBar Panels
If (p Text = str) Then
panel = p
End If
Next
If (Not (panel Is Nothing)) Then
Me StatusBar Panels Remove(panel)
End If
End Sub
如何在状态条面板上显示图标?
使用StatusBarPanel Icon属性
如何自动分配状态条空间?
lishixinzhi/Article/program/net/201311/12124