详解VB开发定制控件

开发 后端
这里介绍在VB开发定制控件时特别重要的一个问题是如何显示定制控件的用户界面。无论如何组织定制控件,需要注意的是,定制控件有时会重新显示。

本文向大家介绍VB开发定制控件,可能好多人还不了解VB开发定制控件,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西。

我们的定制类是通过继承UserControl类而生成的,由于UserControl也是由继承Control类而生成的,我们的定制类将会继承 Control类的所有有用的方法、属性和事件。例如,由于是继承Control类生成的,我们的定制类会自动地拥有事件处理程序。

在VB开发定制控件时特别重要的一个问题是如何显示定制控件的用户界面。无论如何组织定制控件,需要注意的是,定制控件有时会重新显示。因此,当定制控件重绘时,必须重新绘制用户界面。考虑到控件每次重绘时,都会调用Control类的OnPaint方法,使用新的绘制定制控件用户界面的OnPaint方法覆盖该方法就能保证定制控件的保持一定的外观。

表1中的代码是一个名称为RoundButton的控件,在图1中,表单上有一个RoundButton定制控件,表2是其代码。我们需要作的工作基本上就是覆盖OnPaint方法。系统向该方法传递一个PaintEventArgs对象,从该方法中我们可以获得控件的 System.Drawing.Graphics对象,然后使用它的方法绘制定制控件的用户界面。

表1:RoundButton控件

  1. Imports System.Windows.Forms  
  2. Imports System.Drawing  
  3.  
  4. Public Class RoundButton : Inherits UserControl  
  5.  
  6. Public BackgroundColor As ColorColor = Color.Blue  
  7. Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)  
  8.  
  9. Dim graphics As Graphics = e.Graphics  
  10. Dim penWidth As Integer = 4 
  11. Dim pen As Pen = New Pen(Color.Black, 4)  
  12.  
  13. Dim fontHeight As Integer = 10 
  14. Dim font As Font = New Font("Arial", fontHeight)  
  15.  
  16. Dim brush As SolidBrush = New SolidBrush(BackgroundColor)  
  17. graphics.FillEllipse(brush, 0, 0, Width, Height)  
  18. Dim textBrush As SolidBrush = New SolidBrush(Color.Black)  
  19.  
  20. graphics.DrawEllipse(pen, CInt(penWidth / 2), _  
  21. CInt(penWidth / 2), Width - penWidth, Height - penWidth)  
  22.  
  23. graphics.DrawString(Text, font, textBrush, penWidth, _  
  24. Height / 2 - fontHeight)  
  25. End Sub  
  26. End Class 

表1中的代码非常地简单,简直令人不能相信。我们的定制类只有一个方法:OnPaint。简单地说,该方法传递一个PaintEventArgs对象,从中我们可以获得System.Drawing.Graphics对象。这一Graphics对象表示我们的定制控件的绘制区,无论在该Graphics对象上绘制什么东西,它都会显示为定制用户控件的界面。

表2:RoundButton控件的调用

  1. Public Class MyForm  
  2. Inherits System.Windows.Forms.Form  
  3.  
  4. #Region " Windows Form Designer generated code "  
  5.  
  6. Private WithEvents roundButton As RoundButton  
  7. Public Sub New()  
  8. MyBase.New()  
  9.  
  10. '这个调用是Windows Form Designer所要求的  
  11. InitializeComponent()  
  12.  
  13. '在InitializeComponent()调用后,可以添加任意的实例化代码  
  14.  
  15. End Sub  
  16.  
  17. '表单覆盖,整理组件列表  
  18. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)  
  19. If disposing Then  
  20. If Not (components Is Nothing) Then  
  21. components.Dispose()  
  22. End If  
  23. End If  
  24. MyBase.Dispose(disposing)  
  25. End Sub  
  26.  
  27. 'Windows Form Designer所要求的  
  28. Private components As System.ComponentModel.IContainer  
  29.  
  30. '注意:下面的过程是Windows Form Designer所要求的,  
  31. '可以使用Windows Form Designer对它进行修改,  
  32. '但不要使用软件编辑程序进行修改  
  33. Private Sub InitializeComponent()  
  34. '  
  35. 'MyForm  
  36. '  
  37. Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)  
  38. Me.ClientSize = New System.Drawing.Size(292, 273)  
  39. Me.Name = "MyForm" 
  40. Me.Text = "Using Custom Control" 
  41.  
  42. roundButton = New RoundButton()  
  43. AddHandler roundButton.Click, AddressOf roundButton_Click  
  44. roundButton.Text = "Click Here!" 
  45. roundButton.BackgroundColor = System.Drawing.Color.White  
  46. roundButton.Size = New System.Drawing.Size(80, 80)  
  47. roundButton.Location = New System.Drawing.Point(100, 30)  
  48. Me.Controls.Add(roundButton)  
  49.  
  50. End Sub  
  51.  
  52. #End Region  
  53.  
  54. Private Sub roundButton_Click(ByVal source As Object, ByVal e As EventArgs)  
  55. MessageBox.Show("Thank you.")  
  56. End Sub  
  57. Public Shared Sub Main()  
  58. Dim form As MyForm = New MyForm()  
  59. Application.Run(form)  
  60. End Sub  
  61.  
  62. End Class 

在本篇文章中,我们介绍了VB开发定制控件时需要理解的System.Windows.Forms名字空间中二个重要的类:Control和UserControl。另外,我们还介绍了如何通过直接扩充UserControl类开发自己的定制控件以及如何在 Windows表单中使用定制控件。

【编辑推荐】

  1. 详细分析VB Update方法
  2. 详细讲解VB开发IIS应用程序
  3. VB ConsoleProgressBar简单介绍
  4. 描述VB ConsoleProgressBar类
  5. 概述VB 2005新型控制台
责任编辑:佚名 来源: IT168
相关推荐

2009-10-14 17:21:47

VB.NET定制Win

2010-01-19 10:12:39

VB.NET Butt

2009-10-27 18:06:41

VB.NET开发控件

2009-10-10 16:44:52

VB.NET开发控件

2009-08-04 10:43:59

ASP.NET控件开发

2009-12-30 13:30:16

Silverlight

2009-10-14 16:04:43

VB.NET Noti

2010-01-13 10:53:24

VB.NET控件

2009-10-14 10:19:57

VB.NET Doma

2009-10-23 13:14:38

2009-10-20 10:16:24

VB.NET COMB

2022-03-13 09:12:00

浏览器webCSS 样

2009-10-12 15:02:51

VB.NET动态控件

2009-10-23 13:10:14

VB.NET List

2009-10-14 11:27:20

VB.NET Grou

2009-10-16 14:31:48

VB.NET Noti

2009-12-30 11:16:36

Silverlight

2009-08-11 15:46:15

C#日历控件

2009-10-14 11:15:06

VB.NET Grou

2009-10-16 14:07:18

VB.NET使用Mon
点赞
收藏

51CTO技术栈公众号