首页 | 互联网 | IT动态 | Cisco | Windows | Linux | Java | .Net | Oracle | 华为 | 存储世界 | 服务器 | 网络设备 | IDC | 安全 | 求职招聘
IT培训 | 数字网校 | 技术专题 | 电子书下载 | 教学视频 | 网页设计 | 平面设计 | 解决方案 | 直播室 | 虚拟考场 | 搜索 | 博客 | 沙龙 | 论坛
首页 | JAVA | C# | VB | VB.NET | C/C++ | delphi | 工程管理 | 其他语言 | 论坛
各大城市软件开发培训、软件人才免费咨询热线:400-700-5807
 您现在的位置: 中国IT实验室 >> 桌面开发 >> VB.net >> 文章正文
用VB.NET定制Windows控件
来源:ChinaItLab 作者:佚名 时间:2007-8-23


  3 设计能自动折行的下拉列表

  .net中,ComboBox控件实现下拉列表,在该控件中每项占用一行,如果有选择项的内容长度超过下拉列表的宽度,则超过部分不显示,这样就可能造成用户所见的内容不完全而无法选择的情况.我们对该控件进行改进,当一行显示不完全某项时进行折行显示,为了防止用户将折行的项误认为是两个选择项,我们将不同的选项用相互间隔的颜色区分.类代码如下:

Public Class myComboBox
Inherits System.Windows.Forms.ComboBox

#Region " Windows 窗体设计器生成的代码 "

#End Region
'下面代码用不同的颜色显示选项
Private Sub myComboBox_DrawItem(ByVal sender As Object, ByVal e As _ System.Windows.Forms.DrawItemEventArgs) Handles MyBase.DrawItem
If e.Index < 0 Then Exit Sub
Dim txtColor As SolidBrush
Dim bgColor As SolidBrush
Dim txtfnt As Font
txtColor = New SolidBrush(Color.Black)
If e.Index / 2 = CInt(e.Index / 2) Then
bgColor = New SolidBrush(Color.White)
Else
bgColor = New SolidBrush(Color.LightYellow)
End If
If e.State And DrawItemState.Selected Then
txtColor = New SolidBrush(Color.Blue)
End If
e.Graphics.FillRectangle(bgColor, e.Bounds)
e.Graphics.DrawRectangle(Pens.Black, e.Bounds)
Dim r As New RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
e.Graphics.DrawString(Items(e.Index).ToString, Me.Font, txtColor, r)
End Sub
'下面代码计算每行选项需要的尺寸
Private Sub myComboBox_MeasureItem(ByVal sender As Object, ByVal e As _ System.Windows.Forms.MeasureItemEventArgs) Handles MyBase.MeasureItem
Dim lsize As SizeF
lsize = e.Graphics.MeasureString(Items(e.Index).ToString, Me.Font, New SizeF(Me.Width, 200))
e.ItemHeight = lsize.Height
e.ItemWidth = lsize.Width
End Sub
End Class

  4 使用定制的控件

  上面两个类编译后生成DLL文件,有了DLL文件就可以在你的项目中使用上述定制控件。打开Customize Toolbox,然后单击.NET Framework Components标签,通过Browse找到DLL文件,然后选择控件名前面的复选框,两个控件就出现在你的工具箱。

  使用myComboBox时,和普通控件一样使用,不过要将其DrawMode属性设置为OwnerDrawVariable,否则MeasureItem和DrawItem事件代码不执行,执行效果如图1。


图1 可折行显示的下拉列表效果 图2 带图形的菜单效果

  使用myMenuItem时要注意,在窗体上建立菜单时,系统自动创建MainMenu,而菜单项默认为MenuItem,要使用myMenuItem必须手工改写,将下列代码:

Friend WithEvents MenuItem1 As System.Windows.Forms.MenuItem

Me.MenuItem1 = New System.Windows.Forms.MenuItem()

  改写为:

Friend WithEvents MenuItem1 As myMenuItem.myMenuItem

Me.MenuItem1 = New myMenuItem.myMenuItem ()

  还要将所有myMenuItem的菜单项的OwnerDraw属性设置为True.否则不能得到预期效果.执行效果如图2.



  5 结束语

  本文以带图形的菜单和可以折行显示的下拉列表为例讲解如何定制.NET的控件。通过定制控件,可以实现更友好的用户界面。

上一页  [1] [2] 

【责编:Youping】
中国IT教育热线咨询
相关文章
多线程、Socket技术及委托技术的关系
VB.Net连接各种数据库的几种方法
VB.NET中的多窗体编程:升级到 .NET
VB.NET中监视文件夹的变化
VB.NET中对象的克隆
VB.NET中的TextBox控件详解
VB.NET实现PC与掌上电脑PPC的双向通信
在VB.NET编程中使用数组
在VB.NET中进行抓屏
VB/VB.NET/C#导出到Excel的方法
推荐文章

 精彩友情推荐
·锐捷交换机报价
·锐捷交换机
·锐捷网络网络交换机
·smc交换机
·smc交换机报价
·IDC资讯大全
·机房品质万里行
·IDC托管必备知识
·全国IDC报价
·网站推广优化
最新更新 推荐文章
·框架:J2EE WEB应用架构分析03-13
·几种VC++数据库开发技术的相对比…03-13
·利用C#实现标注式消息提示窗口03-13
·用C#创建COM对象03-13
·Visual C#多线程参数传递浅析03-13
·Visual C#多线程参数传递浅析03-13
·基于HOOK和MMF的Win密码渗透技术11-15
·Visual C++设计超强仿QQ自动伸缩…11-15
·Java SE 6.0实现高质量桌面集成开…11-15
·史玉柱东山再起幕后高人11-15
·Visual Basic 9.0隐式类型的局部…09-30
·用C#创建COM对象09-06
·IT管理十大失误及其对策08-30
·VC中利用MFC设计绘图程序初步08-23
·JAVA中对象创建和初始化过程08-23
·C语言中的位域的使用08-09
·浅谈Java桌面应用程序开发08-09
·C#的前途如何?08-02
·几种VC++数据库开发技术的相对比较07-12
·用Visual C#实现网络封包监视07-12
·VB.NET中的TextBox控件详解07-12
·VB.NET实现PC与掌上电脑PPC的双向通信07-05