重画系列:双色Button


所属类别:.NET

文章作者:未知

特别推荐:免费发布信息 承包关键词~~抢爆了!HOT!


效果如下图:比较简单,下面是源代码,新建一类库工程,拷贝以下源代码覆盖Class1,生成Dll文件就可以使用了Public Class XpStyleButton Inherits System.Windows.Forms.UserControl#Region " Windows 窗体设计器生成的代码 " Public Sub New() MyBase.New() '该调用是 Windows 窗体设计器所必需的。 InitializeComponent() '在 InitializeComponent() 调用之后添加任何初始化 setstyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer Or ControlStyles.UserPaint, True) End Sub 'UserControl1 重写 dispose 以清理组件列表。 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 窗体设计器所必需的 Private components As System.ComponentModel.IContainer '注意:以下过程是 Windows 窗体设计器所必需的 '可以使用 Windows 窗体设计器修改此过程。 '不要使用代码编辑器修改它。 Private Sub InitializeComponent() ' 'XpStyleButton ' Me.Name = "XpStyleButton" Me.Size = New System.Drawing.Size(264, 88) End Sub#End Region Private IsMouseDown As Boolean = False Private xMagin As Integer = 2 Private yMagin As Integer = 2 Private m_BackColor As Color = Color.BurlyWood Private m_ForeColor As Color = Color.White Private m_Style As Style = Style.RectStyle 'button's Styles Public Enum Style RectStyle = 0 EllipseStyle = 1 CircleStyle = 2 End Enum '--------------------对外属性-------------- '亮色 Public Property LightColor() As Color Get Return m_ForeColor End Get Set(ByVal Value As Color) m_ForeColor = Value End Set End Property '暗色 Public Property GrayColor() As Color Get Return Me.m_BackColor End Get Set(ByVal Value As Color) Me.m_BackColor = Value End Set End Property Public Property ButtonStyle() As Style Get Return Me.m_Style End Get Set(ByVal Value As Style) If Value = Style.CircleStyle Then Me.Height = Me.Width End If Me.m_Style = Value End Set End Property '在这里实现重画双色Button Private Sub XpStyleButton_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint Me.BackColor = Me.Parent.BackColor Dim brush As Drawing.Drawing2D.LinearGradientBrush Dim brush1 As Drawing.Drawing2D.LinearGradientBrush brush = New Drawing.Drawing2D.LinearGradientBrush(New PointF(0, 0), New PointF(0, Me.Height), Me.m_ForeColor, Me.m_BackColor) '对鼠标单击响应 If Me.IsMouseDown Then brush1 = New Drawing.Drawing2D.LinearGradientBrush(New PointF(xMagin, yMagin), New PointF(xMagin, Me.Height), Color.FromArgb(0, 255, 255, 255), Color.FromArgb(150, 255, 255, 255)) Else brush1 = New Drawing.Drawing2D.LinearGradientBrush(New PointF(xMagin, yMagin), New PointF(xMagin, Me.Height / 2), Color.FromArgb(150, 255, 255, 255), Color.FromArgb(0, 255, 255, 255)) End If brush.WrapMode = Drawing.Drawing2D.WrapMode.TileFlipX brush1.WrapMode = Drawing.Drawing2D.WrapMode.TileFlipX Dim rect As Rectangle = New Rectangle(0, 0, Me.Width - xMagin, Me.Height - yMagin) Dim rect1 As Rectangle = New Rectangle(xMagin, yMagin, Me.Width - 2 * xMagin, Me.Height / 2) Select Case Me.m_Style Case Style.RectStyle Me.DrawRectStyle(e.Graphics, rect, rect1, brush, brush1) Case Style.EllipseStyle Me.DrawEllipseStyle(e.Graphics, rect, rect1, brush, brush1) Case Style.CircleStyle Me.DrawEllipseStyle(e.Graphics, rect, rect1, brush, brush1) Case Else Me.DrawRectStyle(e.Graphics, rect, rect1, brush, brush1) End Select End Sub '画椭圆形按钮(圆型按钮也是由它重画) Private Sub DrawEllipseStyle(ByRef g As Graphics, ByVal rect As Rectangle, ByVal rect1 As Rectangle, ByVal bbrush As Brush, ByVal fbrush As Brush) g.SmoothingMode = Drawing.Drawing2D.SmoothingMode.AntiAlias g.FillEllipse(bbrush, rect) g.FillEllipse(fbrush, rect) g.DrawEllipse(New Pen(m_BackColor), rect) End Sub '画矩形按钮 Private Sub DrawRectStyle(ByRef g As Graphics, ByVal rect As Rectangle, ByVal rect1 As Rectangle, ByVal bbrush As Brush, ByVal fbrush As Brush) g.SmoothingMode = Drawing.Drawing2D.SmoothingMode.AntiAlias g.FillRectangle(bbrush, rect) g.FillRectangle(fbrush, rect) g.DrawRectangle(New Pen(m_BackColor), rect) End Sub Private Sub XpStyleButton_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown IsMouseDown = True Me.Refresh() End Sub Private Sub XpStyleButton_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp IsMouseDown = False Me.Refresh() End SubEnd Class以下是测试的源代码,需要添加上面生成的Dll的引用:Public Class Form1 Inherits System.Windows.Forms.Form#Region " Windows 窗体设计器生成的代码 " Public Sub New() MyBase.New() '该调用是 Windows 窗体设计器所必需的。 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 Private button1 As XPStyleButton.XpStyleButton 'Windows 窗体设计器所必需的 Private components As System.ComponentModel.IContainer '注意:以下过程是 Windows 窗体设计器所必需的 '可以使用 Windows 窗体设计器修改此过程。 '不要使用代码编辑器修改它。 Friend WithEvents XpStyleButton1 As XPStyleButton.XpStyleButton Friend WithEvents XpStyleButton4 As XPStyleButton.XpStyleButton Private Sub InitializeComponent() Me.button1 = New XPStyleButton.XpStyleButton() Me.XpStyleButton1 = New XPStyleButton.XpStyleButton() Me.XpStyleButton4 = New XPStyleButton.XpStyleButton() Me.SuspendLayout() ' 'button1 ' Me.button1.BackColor = System.Drawing.SystemColors.Control Me.button1.ButtonStyle = XPStyleButton.XpStyleButton.Style.RectStyle Me.button1.ForeColor = System.Drawing.Color.White Me.button1.GrayColor = System.Drawing.Color.FromArgb(CType(0, Byte), CType(192, Byte), CType(0, Byte)) Me.button1.LightColor = System.Drawing.SystemColors.HighlightText Me.button1.Location = New System.Drawing.Point(56, 32) Me.button1.Name = "button1" Me.button1.Size = New System.Drawing.Size(88, 25) Me.button1.TabIndex = 0 ' 'XpStyleButton1 ' Me.XpStyleButton1.BackColor = System.Drawing.SystemColors.Control Me.XpStyleButton1.ButtonStyle = XPStyleButton.XpStyleButton.Style.CircleStyle Me.XpStyleButton1.GrayColor = System.Drawing.Color.Blue Me.XpStyleButton1.LightColor = System.Drawing.Color.White Me.XpStyleButton1.Location = New System.Drawing.Point(280, 24) Me.XpStyleButton1.Name = "XpStyleButton1" Me.XpStyleButton1.Size = New System.Drawing.Size(104, 64) Me.XpStyleButton1.TabIndex = 1 ' 'XpStyleButton4 ' Me.XpStyleButton4.BackColor = System.Drawing.SystemColors.Control Me.XpStyleButton4.ButtonStyle = XPStyleButton.XpStyleButton.Style.CircleStyle Me.XpStyleButton4.GrayColor = System.Drawing.Color.BurlyWood Me.XpStyleButton4.LightColor = System.Drawing.Color.White Me.XpStyleButton4.Location = New System.Drawing.Point(168, 16) Me.XpStyleButton4.Name = "XpStyleButton4" Me.XpStyleButton4.Size = New System.Drawing.Size(96, 96) Me.XpStyleButton4.TabIndex = 2 ' 'Form1 ' Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14) Me.ClientSize = New System.Drawing.Size(520, 273) Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.button1, Me.XpStyleButton4, Me.XpStyleButton1}) Me.Name = "Form1" Me.Text = "Form1" Me.ResumeLayout(False) End Sub#End RegionEnd Class谢谢阅读,希望有什么意见能和我联系,ganenping@mainone.com.cn qq: 44460100关闭本页

相关信息

· 左右手互博,是否选择MySQL的五个正反理由

· DirectX漏洞被利用 马上修复系统

· ADO编程应用

·  公司网络维护之自动关机








....

73984 88991