熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

隨心所欲繪制狀態欄

2013-11-13 09:57:45  來源: .NET編程 

  狀態欄我不想詳細解釋控件非常容易用StatusBar和StatusBarPanel配合使用非常簡單但是這樣只是滿足了基本的狀態欄功能的需要很多的時候我們可能還需要個性化的狀態欄我們需要隨心所欲的繪制它要做到這一點不難StatusBarPanel類提供了Style屬性將其設置為StatusBarPanelStyleOwnerDraw就可以自己編寫代碼繪制它了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 SystemWindowsFormsStatusBarDrawItemEventArgs) Handles StatusBarDrawItem

  Dim g As Graphics = sbdeventGraphics

  Dim rf As New RectangleF(sbdeventBoundsX sbdeventBoundsY _

  sbdeventBoundsWidth sbdeventBoundsHeight)

  If (sbdeventIndex = ) Then

  gFillRectangle(BrushesRed rf)

  Dim f As New Font(ËÎÌå )

  Dim b As Brush = BrushesBlack

  gDrawString(sbdeventPanelText f b rf)

  End If

  If (sbdeventIndex = ) Then

  gFillRectangle(BrushesRed rf)

  Dim f As New Font(ËÎÌå )

  Dim b As Brush = BrushesBlack

  gDrawString(sbdeventPanelText f b rf)

  End If

  End Sub

  需要特別強調一下參數 SystemWindowsFormsStatusBarDrawItemEventArgs 該類型的參數包含一個與DrawItem事件相關的數據詳見下表

  BackColor

  獲取所繪制的項的背景色

  Bounds

  獲取表示所繪制項的邊界的矩形

  Font

  獲取分配給所繪制項的字體

  ForeColor

  獲取所繪制項的前景色

  Graphics

  獲取要在其上繪制項的圖形表面

  Index

  獲取所繪制項的索引值

  Panel

  獲取要繪制的StatusBarPanel

  State

  獲取所繪制項的狀態

  如何讓狀態條右下角的三角消失呢?

  將statusBarSizingGrip屬性設置為false

  如何讓狀態欄不顯示其StatusBarPanel?

  把statusBar的ShowPanel屬性設置為false

  怎樣在程序運行過程中向狀態條添加(刪除)面板?

  使用StatusBar的Panels屬性

  Private Sub btnAddPanel_Click(ByVal sender As SystemObject ByVal e As SystemEventArgs) Handles btnAddPanelClick

  Dim panel As New StatusBarPanel

  panelText = 動態添加的面板!

  MeStatusBarPanelsAdd(panel)

  End Sub

  Private Sub btnDelPanel_Click(ByVal sender As SystemObject ByVal e As SystemEventArgs) Handles btnDelPanelClick

  Dim str As String = 動態添加的面板!

  Dim panel As StatusBarPanel

  For Each p As StatusBarPanel In MeStatusBarPanels

  If (pText = str) Then

  panel = p

  End If

  Next

  If (Not (panel Is Nothing)) Then

  MeStatusBarPanelsRemove(panel)

  End If

  End Sub

  如何在狀態條面板上顯示圖標?

  使用StatusBarPanelIcon屬性

  如何自動分配狀態條空間?

  使用StatusBarPanelAutoSize屬性該值指示是否自動調整狀態欄面板的大小該屬性接受一個StatusBarPanelAutoSize枚舉默認值是StatusBarPanelAutoSizeNone這意味著不論狀態條如何面板始終保持大小不變除此之外還有兩種選擇Contents和Springs前者表示面板寬度取決於其內容後者表示面板大小會被自動調整至於調整之後合適與否那我可就說不准了如果AutoSize設置為Springs還可以用MinWidth屬性設置最小寬度


From:http://tw.wingwit.com/Article/program/net/201311/12124.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.