VB.NET状态栏控件上添加任意控件

翻译|其它|编辑:郝浩|2007-08-30 09:28:16.000|阅读 1374 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

微软提供的标准控件总是很简单,.NET也很好地继承了微软的这一优良传统。近日我因编程的需要,需要在状态栏做一个进度条,查看了  Statusbar  中各个  Panel  对象提供的所有功能,都没有直接将进度条控件放在面板中的方法,看了  MSDN  中的描述:在  DrawItem  事件中若要显示  StatusBarPanel(显示进度栏),则可以使用此事件在面板上执行进度栏的描述操作。如果什么都要我自己画出来的话,我还要控件干什么。当时我被迫自己用了二三十行代码摸拟了一个进度条,可怜啊!事后我冥思苦想了很久,终于发现微软其实是已经将任意的控件放在状态栏的方法提供了给我,只不过我没有觉悟而已,下面小子将以这一方法介绍给大家。

这个示例是将一个按钮放在状态栏的第一个面板上,第二个面板显示按钮点击时鼠标的屏幕坐标。首先在窗体放入下表中的控件并按之设置各控件属性

控件类型

属性

设置值

Panel

Name

Panel1

Dock

Bottom

StatusBar

Name

StatusBar1

Dock

Fill

Panels

1、加入一个Namestabutton的面板将其Style设为OwnerDraw
2
、加入一个NamestaStatus的面板,将其Style设为TextAutoSize设为Spring,Text设为状态栏上放置控件

Button

Name

Button1

注:StatusBar1Button1均需为  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  中的坐标针对对应的面板调整控件的尺寸即可,放任何控件都可以。呵呵,所有的一切就那么简单。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP