分享
 
 
 

随心所欲绘制状态栏

王朝other·作者佚名  2006-07-18
窄屏简体版  字體: |||超大  

随心所欲绘制状态栏

状态栏我不想详细解释。控件非常容易用。StatusBar和StatusBarPanel配合使用,非常简单。但是这样只是满足了基本的状态栏功能的需要,很多的时候我们可能还需要个性化的状态栏。我们需要随心所欲的绘制它。要做到这一点不难,StatusBarPanel类提供了Style属性,将其设置为StatusBarPanelStyle.OwnerDraw就可以自己编写代码绘制它了。StatusBar的DrawItem事件当所有者描述的状态栏控件的可视特征发生变化时,发生此事件。在这个事件里安置绘制StatusBarPanel的程序代码。

StatusBarPanelStyle枚举可以决定StatusBarPanel是由系统绘制还是由程序员亲自编写程序进行绘制。有两种选择Text和OwnerDraw。前者要求StatusBarPanel按照标准字体显示文本,后者允许程序员自己写代码绘制StatusBarPanel。默认情况下是Text。

以下代码片断自行绘制StatusBarPanel:

在一个窗体上添加一个状态栏,将其ShowPanels属性设置为true。然后,对其Panels属性进行设置。添加3个StatusBarPanel,其中第二个的Style属性设置为Text,其余两个的Style设置为OwnerDraw。

Private Sub StatusBar1_DrawItem(ByVal sender As Object, ByVal sbdevent As System.Windows.Forms.StatusBarDrawItemEventArgs) Handles StatusBar1.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 = 0) Then

g.FillRectangle(Brushes.Red, rf)

Dim f As New Font("ËÎÌå", 10)

Dim b As

Brush = Brushes.Black

g.DrawString(sbdevent.Panel.Text, f, b, rf)

End If

If (sbdevent.Index = 2) Then

g.FillRectangle(Brushes.Red, rf)

Dim f As New Font("ËÎÌå", 10)

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.StatusBar1.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.StatusBar1.Panels

If (p.Text = str) Then

panel = p

End If

Next

If (Not (panel Is Nothing)) Then

Me.StatusBar1.Panels.Remove(panel)

End If

End Sub

如何在状态条面板上显示图标?

使用StatusBarPanel.Icon属性。

如何自动分配状态条空间?

使用StatusBarPanel.AutoSize属性。该值指示是否自动调整状态栏面板的大小。该属性接受一个StatusBarPanelAutoSize枚举。默认值是StatusBarPanelAutoSize.None,这意味着不论状态条如何面板始终保持大小不变。除此之外还有两种选择,Contents和Springs。前者表示面板宽度取决于其内容,后者表示面板大小会被自动调整,至于调整之后合适与否,那我可就说不准了。如果AutoSize设置为Springs,还可以用MinWidth属性设置最小宽度。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有