當前位置:大家網首頁>計算機 > 程序開發 > .Net > 正文

VB.NET狀態欄控件上添加任意控件

來源:網絡 發布日期:2009-06-08 11:50
    微軟提供的標準控件總是很簡單,.NET也很好地繼承了微軟的這一“優良傳統”。近日我因編程的需要,需要在狀態欄做一個進度條,查看了Statusbar中各個Panel對象提供的所有功能,都沒有直接將進度條控件放在面板中的方法,看了MSDN中的描述:在DrawItem事件中若要顯示 StatusBarPanel(顯示進度欄),則可以使用此事件在面板上執行進度欄的描述操作。如果什么都要我自己畫出來的話,我還要控件干什么。當時我被迫自己用了二三十行代碼摸擬了一個進度條,可憐!事后我冥思苦想了很久,終于發現微軟其實是已經將任意的控件放在狀態欄的方法提供了給我,只不過我沒有覺悟而已,下面小子將以這一方法介紹給大家。

  這個示例是將一個按鈕放在狀態欄的第一個面板上,第二個面板顯示按鈕點擊時鼠標的屏幕坐標。首先在窗體放入下表中的控件并按之設置各控件屬性

控件類型 屬性 設置值
Panel Name Panel1
Dock Bottom
StatusBar Name StatusBar1
Dock Fill
Panels 1、加入一個Name為stabutton的面板將其Style設為OwnerDraw。
2、加入一個Name為staStatus的面板,將其Style設為Text,AutoSize設為Spring,Text設為“狀態欄上放置控件”。
Button Name Button1

  注:StatusBar1、Button1均需為Panel1的子控件,具體做法是先畫出Panel1,然后選定它,再在其上畫出StatusBar1和Button1,再設置StatusBar1和Button1的相應屬性,這樣一來StatusBar1和Button1就會隨Panel的移動而移動了(這是日后不會導致窗體上因控件過多而出現混亂的較好方法)。

  窗體的代碼中加入如下代碼:

Private Sub StatusBar1_DrawItem _
(ByVal sender As Object, ByVal sbdevent As System.Windows.Forms.StatusBarDrawItemEventArgs) _
Handles StatusBar1.DrawItem
 If sbdevent.Panel Is stabutton Then
 ‘此處是關鍵,一定要根據Statusbar控件中相應面板的調整大小時,
 ‘將放置在該面板上用戶放置的控件(此處是Button1)調整為面板的尺寸。
 ‘,在sbdevent.Bounds提供的面板大小中使用的坐標系統原點是在StatusBar1的左上角,
 ‘而因為Button1.Bounds使用的坐標系統的原點都是在Panel1的左上角,而StatusBar1和Button1的父對象
 ‘同為Panel1,所以只需將sbdevent.Bounds的X及Y坐標加上StatusBar1.Location的X和Y做一個平移
 ‘就可以得到Button1所應處的正確位置。

  Button1.Bounds = New Rectangle(sbdevent.Bounds.X + StatusBar1.Location.X, _
   sbdevent.Bounds.Y + StatusBar1.Location.Y, _
   sbdevent.Bounds.Width, _
   sbdevent.Bounds.Height)
 End If
End Sub
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
 StatusBar1.Panels(1).Text = "你點擊了按鈕,鼠標位置為" & Cursor.Position.ToString
End Sub

  一切OK,按下運行按鈕執行程序就可以看到運行結果了。

  看了以上代碼,大伙兒明白了吧,只要將需要放上控件的狀態欄面板的Style屬性設為OwnerDraw,然后在狀態欄的DrawItem中利用sbdevent提供Bounds中的坐標針對對應的面板調整控件的尺寸即可,放任何控件都可以。呵呵,所有的一切就那么簡單。

更多信息請訪問:大家論壇

熱門推薦

閱讀排行

巫师3怎样赚钱方法