科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件用VB.NET定制Windows控件

用VB.NET定制Windows控件

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

文介绍了如何定制.NET中的Windows控件,并给出定制带图形的菜单和可以折行显示的下拉列表控件的源代码

作者:WL 来源:论坛 2007年11月9日

关键字: vb.net 定制 Windows 控件

  • 评论
  • 分享微博
  • 分享邮件
.NET是Microsoft公司提供解决未来计算需要的工具.在.NET Framework中提供了许多控件,可以解决编程中用户界面的设计和实现,但在实际应用中可能需要对系统提供的控件进行改进,如.NET的菜单不能带图形,下拉列表不能折行显示。本文通过对这两个控件的改进介绍,如何定制NET的Windows控件(用VB.NET实现)。

  1 .NET中设计控件

  .NET将控件放在UserControl对象上,可以自己编程绘制定制控件,也可以组合现有的控件形成复合控件或对现有控件进行改进。当选择建立Windows Control Library时系统自动创建一个类,代码如下:

Public Class UserControl1
Inherits System.Windows.Forms.UserControl

  UserControl1是控件名称,需要时可以更改, UserControl是所有控件的父类,如果要对现有控件进行改进,可以用现有控件类名代替UserControl。

  在该类中可以用属性过程实现控件的属性,用公用过程实现控件的方法,如果要自己编程绘制控件,代码应放在OnPaint方法中。对于自画控件编程用下面两个方法:MeasureItem和DrawItem,MeasureItem事件确定发生绘图过程的矩形尺寸,DrawItem事件中进行绘制过程。该控件类编译后生成DLL文件。

  2 设计带图形的菜单

  .NET中,MainMenu 控件表示窗体菜单结构的容器。菜单由表示菜单结构中单个菜单命令的MenuItem对象组成,每个MenuItem可以成为应用程序的命令或其他子菜单项的父菜单,要设计带图形的菜单就要对MenuItem进行定制。下面是一个定制的MenuItem的类代码,在类中主要实现MeasureItem和DrawItem两个事件:

Public Class myMenuItem
Inherits System.Windows.Forms.MenuItem
Private m_picture As Image
#Region

#End Region
'下面代码实现Picture属性
Public Property picture() As Image
Get
picture = m_picture
End Get
Set(ByVal Value As Image)
m_picture = Value
End Set
End Property
'下面代码首先在菜单项上绘制图形,然后绘制菜单内容,图形在左边,然后是菜单内容
Private Sub myMenuItem_DrawItem(ByVal sender As Object, ByVal e As _ System.Windows.Forms.DrawItemEventArgs) Handles MyBase.DrawItem
Dim r As New RectangleF(e.Bounds.X + e.Bounds.Height, e.Bounds.Y, e.Bounds.Width, _ e.Bounds.Height)
Dim r1 As New RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Height, e.Bounds.Height)
e.Graphics.DrawImage(m_picture, r1)
e.Graphics.DrawString(Me.Text, New Font("Times New Roman", 10, FontStyle.Regular), _ Brushes.Black, r)
End Sub
'下面代码用来确定菜单的矩形尺寸,注意最后的语句将宽度加宽
Private Sub myMenuItem_MeasureItem(ByVal sender As Object, ByVal e As _ System.Windows.Forms.MeasureItemEventArgs) Handles MyBase.MeasureItem
Dim drawSize As SizeF
drawSize = e.Graphics.MeasureString(Me.Text, New Font("Times New Roman", 10, _ FontStyle.Regular))
e.ItemHeight = Drawsize.Height
e.ItemWidth = Drawsize.Width + Drawsize.Height
End Sub
End Class
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章