本文向大家介绍VB开发定制控件,可能好多人还不了解VB开发定制控件,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西。
我们的定制类是通过继承UserControl类而生成的,由于UserControl也是由继承Control类而生成的,我们的定制类将会继承 Control类的所有有用的方法、属性和事件。例如,由于是继承Control类生成的,我们的定制类会自动地拥有事件处理程序。
在VB开发定制控件时特别重要的一个问题是如何显示定制控件的用户界面。无论如何组织定制控件,需要注意的是,定制控件有时会重新显示。因此,当定制控件重绘时,必须重新绘制用户界面。考虑到控件每次重绘时,都会调用Control类的OnPaint方法,使用新的绘制定制控件用户界面的OnPaint方法覆盖该方法就能保证定制控件的保持一定的外观。
表1中的代码是一个名称为RoundButton的控件,在图1中,表单上有一个RoundButton定制控件,表2是其代码。我们需要作的工作基本上就是覆盖OnPaint方法。系统向该方法传递一个PaintEventArgs对象,从该方法中我们可以获得控件的 System.Drawing.Graphics对象,然后使用它的方法绘制定制控件的用户界面。
表1:RoundButton控件
- Imports System.Windows.Forms
- Imports System.Drawing
- Public Class RoundButton : Inherits UserControl
- Public BackgroundColor As ColorColor = Color.Blue
- Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
- Dim graphics As Graphics = e.Graphics
- Dim penWidth As Integer = 4
- Dim pen As Pen = New Pen(Color.Black, 4)
- Dim fontHeight As Integer = 10
- Dim font As Font = New Font("Arial", fontHeight)
- Dim brush As SolidBrush = New SolidBrush(BackgroundColor)
- graphics.FillEllipse(brush, 0, 0, Width, Height)
- Dim textBrush As SolidBrush = New SolidBrush(Color.Black)
- graphics.DrawEllipse(pen, CInt(penWidth / 2), _
- CInt(penWidth / 2), Width - penWidth, Height - penWidth)
- graphics.DrawString(Text, font, textBrush, penWidth, _
- Height / 2 - fontHeight)
- End Sub
- End Class
表1中的代码非常地简单,简直令人不能相信。我们的定制类只有一个方法:OnPaint。简单地说,该方法传递一个PaintEventArgs对象,从中我们可以获得System.Drawing.Graphics对象。这一Graphics对象表示我们的定制控件的绘制区,无论在该Graphics对象上绘制什么东西,它都会显示为定制用户控件的界面。
表2:RoundButton控件的调用
- Public Class MyForm
- Inherits System.Windows.Forms.Form
- #Region " Windows Form Designer generated code "
- Private WithEvents roundButton As RoundButton
- Public Sub New()
- MyBase.New()
- '这个调用是Windows Form Designer所要求的
- InitializeComponent()
- '在InitializeComponent()调用后,可以添加任意的实例化代码
- End Sub
- '表单覆盖,整理组件列表
- Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
- If disposing Then
- If Not (components Is Nothing) Then
- components.Dispose()
- End If
- End If
- MyBase.Dispose(disposing)
- End Sub
- 'Windows Form Designer所要求的
- Private components As System.ComponentModel.IContainer
- '注意:下面的过程是Windows Form Designer所要求的,
- '可以使用Windows Form Designer对它进行修改,
- '但不要使用软件编辑程序进行修改
- Private Sub InitializeComponent()
- '
- 'MyForm
- '
- Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
- Me.ClientSize = New System.Drawing.Size(292, 273)
- Me.Name = "MyForm"
- Me.Text = "Using Custom Control"
- roundButton = New RoundButton()
- AddHandler roundButton.Click, AddressOf roundButton_Click
- roundButton.Text = "Click Here!"
- roundButton.BackgroundColor = System.Drawing.Color.White
- roundButton.Size = New System.Drawing.Size(80, 80)
- roundButton.Location = New System.Drawing.Point(100, 30)
- Me.Controls.Add(roundButton)
- End Sub
- #End Region
- Private Sub roundButton_Click(ByVal source As Object, ByVal e As EventArgs)
- MessageBox.Show("Thank you.")
- End Sub
- Public Shared Sub Main()
- Dim form As MyForm = New MyForm()
- Application.Run(form)
- End Sub
- End Class
在本篇文章中,我们介绍了VB开发定制控件时需要理解的System.Windows.Forms名字空间中二个重要的类:Control和UserControl。另外,我们还介绍了如何通过直接扩充UserControl类开发自己的定制控件以及如何在 Windows表单中使用定制控件。
【编辑推荐】