日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

VB.NET 开发ColorPicker例子

發布時間:2023/12/31 asp.net 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VB.NET 开发ColorPicker例子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這個colorPicker是繼承control來寫的。如果大家在寫時候可以繼承control 或usercontrol來寫。

難度并不是很大,只要耐心一點就可認寫出來。

用vb.net 寫的,代碼如下:

view plaincopy to clipboardprint?
Imports System.Drawing??
?
Imports System.Drawing.Drawing2D??
?
Imports System.Drawing.Imaging??
?
Imports System.Collections??
?
Imports System.ComponentModel??
?
Imports System.Collections.Generic??
?
Public Class ColorControl??
?
?
?
??? Dim bit As New Bitmap(200, 230)??
?
??? Dim isDraw As Boolean = False?
?
??? Dim index As Integer = 0??
?
??? Dim g As Graphics = Graphics.FromImage(bit)??
?
??? Dim _NowColor As Color = Color.Transparent '現在顏色??
?
??? Dim _CurrentColor As Color = Color.Transparent '當前顏前??
?
?
?
??? '輸出顏色??
?
??? Public Event OutputColorEvent(ByVal NColor As Color, ByVal CColor As Color)??
?
?
?
??? '觸發事件??
?
??? Sub OutcolorHander(ByVal nColor As Color, ByVal CColor As Color)??
?
??????? RaiseEvent OutputColorEvent(nColor, CColor)??
?
??? End Sub?
?
?
?
??? '顏色表??
?
??? Dim ColorList() As Integer = {&HFF003366, &HFF336699, &HFF3366CC, &HFF003399, &HFF000099, &HFF0000CC, &HFF000066, _??
?
&HFF006666, &HFF006699, &HFF0099CC, &HFF0066CC, &HFF0033CC, &HFF0000FF, &HFF3333FF, &HFF333399, _??
?
&HFF008080, &HFF009999, &HFF33CCCC, &HFF00CCFF, &HFF0099FF, &HFF0066FF, &HFF3366FF, &HFF3333CC, &HFF666699, _??
?
&HFF339966, &HFF00CC99, &HFF00FFCC, &HFF00FFFF, &HFF33CCFF, &HFF3399FF, &HFF6699FF, &HFF6666FF, &HFF6600FF, &HFF6600CC, _??
?
&HFF339933, &HFF00CC66, &HFF00FF99, &HFF66FFCC, &HFF66FFFF, &HFF66CCFF, &HFF9999FF, &HFF9999FF, &HFF9966FF, &HFF9933FF, &HFF9900FF, _??
?
&HFF006600, &HFF00CC00, &HFF00FF00, &HFF66FF99, &HFF99FFCC, &HFFCCFFFF, &HFFCCECFF, &HFFCCCCFF, &HFFCC99FF, &HFFCC66FF, &HFFCC00FF, &HFF9900CC, _??
?
&HFF003300, &HFF008000, &HFF33CC33, &HFF66FF66, &HFF99FF99, &HFFCCFFCC, &HFFFFFFFF, &HFFFFCCFF, &HFFFF99FF, &HFFFF66FF, &HFFFF00FF, &HFFCC00CC, &HFF660066, _??
?
&HFF336600, &HFF009900, &HFF66FF33, &HFF99FF66, &HFFCCFF99, &HFFFFFFCC, &HFFFFCCCC, &HFFFF99CC, &HFFFF66CC, &HFFFF33CC, &HFFCC0099, &HFF800080, _??
?
&HFF333300, &HFF669900, &HFF99FF33, &HFFCCFF66, &HFFFFFF99, &HFFFFCC99, &HFFFF9999, &HFFFF6699, &HFFFF3399, &HFFCC3399, &HFF800080, _??
?
&HFF666633, &HFF99CC00, &HFFCCFF33, &HFFFFFF66, &HFFFFCC66, &HFFFF9966, &HFFFF7C80, &HFFFF0066, &HFFD60093, &HFF993366, _??
?
&HFF808000, &HFFCCCC00, &HFFFFFF00, &HFFFFCC00, &HFFFF9933, &HFFFF6600, &HFFFF5050, &HFFCC0066, &HFF660033, _??
?
&HFF996633, &HFFCC9900, &HFFFF9900, &HFFCC6600, &HFFFF3300, &HFFFF0000, &HFFCC0000, &HFF990033, _??
?
&HFF663300, &HFF996600, &HFFCC3300, &HFF993300, &HFF990000, &HFF800000, &HFFA50021, _??
?
&HFFFFFFFF, _??
?
&HFFF8F8F8, &HFFDDDDDD, &HFFB2B2B2, &HFF808080, &HFF5F5F5F, &HFF333333, &HFF1C1C1C, &HFF080808, _??
?
&HFFEAEAEA, &HFFC0C0C0, &HFF969696, &HFF777777, &HFF4D4D4D, &HFF292929, &HFF111111, _??
?
&HFF000000}??
?
?
?
??? Sub New()??
?
??????? ' This call is required by the Windows Form Designer.??
?
??????? InitializeComponent()??
?
??????? ' Add any initialization after the InitializeComponent() call.??
?
??????? SetStyle(ControlStyles.AllPaintingInWmPaint, True)??
?
??????? SetStyle(ControlStyles.StandardDoubleClick, True)??
?
??????? SetStyle(ControlStyles.ResizeRedraw, True)??
?
??????? SetStyle(ControlStyles.UserPaint, True)??
?
??????? SetStyle(ControlStyles.OptimizedDoubleBuffer, True)??
?
??????? g.SmoothingMode = SmoothingMode.HighQuality??
?
??? End Sub?
?
?
?
??? <Description("現在顏色")> _??
?
??? <Browsable(True)> _??
?
??? Public Property NowColor() As Color??
?
??????? Get?
?
??????????? Return _NowColor??
?
??????? End Get?
?
??????? Set(ByVal value As Color)??
?
??????????? _NowColor = value??
?
??????? End Set?
?
??? End Property?
?
?
?
??? <Description("現在顏色")> _??
?
??? <Browsable(True)> _??
?
??? Public Property CurrentColor() As Color??
?
??????? Get?
?
??????????? Return _CurrentColor??
?
??????? End Get?
?
??????? Set(ByVal value As Color)??
?
??????????? _CurrentColor = value??
?
??????? End Set?
?
??? End Property?
?
?
?
?
?
??? ''' <summary>??
?
??? '''繪制六角形上方???
? pdf
??? ''' </summary>??
?
??? ''' <param name="gridSize">繪制六角形的長寬</param>??
?
??? ''' <param name="mapSize">繪制個數</param>??
?
??? ''' <param name="e">繪制對象</param>??
?
??? ''' <remarks></remarks>??
?
??? Public Sub BulidHexes(ByVal gridSize As Size, ByVal mapSize As Size, ByVal e As PaintEventArgs)??
?
??????? If isDraw = True Then?
?
??????????? e.Graphics.DrawImage(bit, 0, 0)??
?
??????????? Exit Sub?
?
??????? End If?
?
??????? Dim lindes As List(Of PointF) = Nothing?
?
??????? '六角格的水平半徑各垂直半徑??
?
??????? Dim wRad As Single = gridSize.Width / 2??
?
??????? Dim HRad As Single = gridSize.Height / 2??
?
?
?
??????? '六角格的水平直線,垂直線??
?
??????? Dim WLine As Single = Math.Sqrt(Math.Pow(wRad, 2) - Math.Pow(wRad / 2, 2))??
?
??????? Dim hLine As Single = Math.Sqrt(Math.Pow(HRad, 2) - Math.Pow(HRad / 2, 2))??
?
??????? '進行蜂窩式切合所必要的位偏移量??
?
??????? Dim wSpce As Single = (wRad - WLine) * 2??
?
??????? Dim hspce As Single = (HRad - hLine) * 2??
?
??????? '六角格的中心點??
?
??????? Dim cx As Single?
?
??????? Dim cy As Single?
?
??????? Dim isCenter As Boolean = False?
?
??????? Dim result As GraphicsPath??
?
??????? For y As Integer = 0 To mapSize.Height - 1??
?
??????????? If isCenter = False Then?
?
??????????????? mapSize.Width += 1??
?
??????????? Else?
?
??????????????? mapSize.Width -= 1??
?
??????????? End If?
?
?
?
??????????? If y = 6 Then?
?
??????????????? isCenter = True?
?
??????????? End If?
?
??????????? For x As Integer = 0 To mapSize.Width - 1??
?
??????????????? '計當前六角格的中心點??
?
??????????????? cx = (gridSize.Width * (x + 1) - wRad) + 100??
?
??????????????? cy = (gridSize.Height * (y + 1) - HRad)??
?
??????????????? cx = cx - wSpce * x??
?
??????????????? cy = cy - hspce * y * 2??
?
?
?
??????????????? If isCenter = False Then?
?
??????????????????? cx = cx - WLine * mapSize.Width??
?
??????????????? Else?
?
??????????????????? cx = cx - WLine * mapSize.Width??
?
??????????????? End If?
?
?
?
??????????????? '保存六角格的六個角的位置??
?
??????????????? lindes = New List(Of PointF)(6)??
?
??????????????? '北??
?
??????????????? Dim start As New PointF(cx, cy - HRad)??
?
??????????????? lindes.Add(start)??
?
??????????????? '東北??
?
??????????????? lindes.Add(New PointF(cx + WLine, cy - HRad / 2))??
?
?
?
??????????????? '東南??
?
??????????????? lindes.Add(New PointF(cx + WLine, cy + HRad / 2))??
?
?
?
??????????????? '南??
?
??????????????? lindes.Add(New PointF(cx, cy + HRad))??
?
?
?
??????????????? '西南??
?
??????????????? lindes.Add(New Point(cx - WLine, cy + HRad / 2))??
?
?
?
??????????????? '西北??
?
??????????????? lindes.Add(New Point(cx - WLine, cy - HRad / 2))??
?
?
?
??????????????? '回到起點:北??
?
??????????????? lindes.Add(start)??
?
??????????????? result = New GraphicsPath()??
?
??????????????? result.AddLines(lindes.ToArray())??
?
??????????????? result.CloseFigure()??
?
??????????????? Dim solidB As SolidBrush??
?
??????????????? solidB = New SolidBrush(Color.FromArgb(ColorList(index)))??
?
??????????????? index += 1??
?
??????????????? g.FillPath(solidB, result)??
?
??????????? Next?
?
??????? Next?
?
?
?
?
?
??????? '=======================??
?
??????? '下左??
?
??????? wRad = 31 / 2??
?
??????? HRad = 32 / 2??
?
??????? '六角格的水平直線,垂直線??
?
??????? WLine = Math.Sqrt(Math.Pow(wRad, 2) - Math.Pow(wRad / 2, 2))??
?
??????? hLine = Math.Sqrt(Math.Pow(HRad, 2) - Math.Pow(HRad / 2, 2))??
?
??????? '進行蜂窩式切合所必要的位偏移量??
?
??????? wSpce = (wRad - WLine) * 2??
?
??????? hspce = (HRad - hLine) * 2??
?
??????
?
??????????? '計當前六角格的中心點??
?
??????? cx = 32 - wRad + 10??
?
??????? cy = 32 - HRad + 190??
?
??????? cx = cx - wSpce??
?
??????? cy = cy - hspce * 2??
?
??????????? '保存六角格的六個角的位置??
?
??????????? lindes = New List(Of PointF)(6)??
?
??????? '北??
?
??????? Dim START1 As New PointF(cx, cy - HRad)??
?
??????? lindes.Add(START1)??
?
??????????? '東北??
?
??????????? lindes.Add(New PointF(cx + WLine, cy - HRad / 2))??
?
?
?
??????????? '東南??
?
??????????? lindes.Add(New PointF(cx + WLine, cy + HRad / 2))??
?
?
?
??????????? '南??
?
??????????? lindes.Add(New PointF(cx, cy + HRad))??
?
?
?
??????????? '西南??
?
??????????? lindes.Add(New Point(cx - WLine, cy + HRad / 2))??
?
?
?
??????????? '西北??
?
??????????? lindes.Add(New Point(cx - WLine, cy - HRad / 2))??
?
?
?
??????????? '回到起點:北??
?
??????? lindes.Add(START1)??
?
??????????? result = New GraphicsPath()??
?
??????????? result.AddLines(lindes.ToArray())??
?
??????????? result.CloseFigure()??
?
??????? Dim solidX As SolidBrush??
?
??????? solidX = New SolidBrush(Color.FromArgb(ColorList(index)))??
?
??????? index += 1??
?
??????? g.FillPath(solidX, result)??
?
?
?
?
?
??????? '================??
?
??????? '下中??
?
??????? wRad = gridSize.Width / 2??
?
??????? HRad = gridSize.Height / 2??
?
??????? '六角格的水平直線,垂直線??
?
??????? WLine = Math.Sqrt(Math.Pow(wRad, 2) - Math.Pow(wRad / 2, 2))??
?
??????? hLine = Math.Sqrt(Math.Pow(HRad, 2) - Math.Pow(HRad / 2, 2))??
?
??????? '進行蜂窩式切合所必要的位偏移量??
?
??????? wSpce = (wRad - WLine) * 2??
?
??????? hspce = (HRad - hLine) * 2??
?
?
?
??????? Dim len As Integer = 7??
?
??????? For y As Integer = 0 To 1??
?
??????????? If y = 1 Then?
?
??????????????? len = 6??
?
??????????? End If?
?
??????????? For x As Integer = 0 To len??
?
??????????????? '計當前六角格的中心點??
?
??????????????? cx = (gridSize.Width * (x + 1) - wRad) + 45??
?
??????????????? cy = (gridSize.Height * (y + 1) - HRad) + 180??
?
??????????????? cx = cx - wSpce * x??
?
??????????????? cy = cy - hspce * y * 2??
?
??????????????? If y = 1 Then?
?
??????????????????? cx = cx + WLine??
?
??????????????? End If?
?
??????????????? '保存六角格的六個角的位置??
?
??????????????? lindes = New List(Of PointF)(6)??
?
??????????????? '北??
?
??????????????? Dim start As New PointF(cx, cy - HRad)??
?
??????????????? lindes.Add(start)??
?
??????????????? '東北??
?
??????????????? lindes.Add(New PointF(cx + WLine, cy - HRad / 2))??
?
?
?
??????????????? '東南??
?
??????????????? lindes.Add(New PointF(cx + WLine, cy + HRad / 2))??
?
?
?
??????????????? '南??
?
??????????????? lindes.Add(New PointF(cx, cy + HRad))??
?
?
?
??????????????? '西南?? pdf
??
??????????????? lindes.Add(New Point(cx - WLine, cy + HRad / 2))??
?
?
?
??????????????? '西北??
?
??????????????? lindes.Add(New Point(cx - WLine, cy - HRad / 2))??
?
?
?
??????????????? '回到起點:北??
?
??????????????? lindes.Add(start)??
?
??????????????? result = New GraphicsPath()??
?
??????????????? result.AddLines(lindes.ToArray())??
?
??????????????? Dim solidY As SolidBrush??
?
??????????????? solidY = New SolidBrush(Color.FromArgb(ColorList(index)))??
?
??????????????? index += 1??
?
??????????????? g.FillPath(solidY, result)??
?
??????????? Next?
?
??????? Next?
?
?
?
?
?
??????? '==============??
?
??????? '下右??
?
??????? wRad = 31 / 2??
?
??????? HRad = 32 / 2??
?
??????? '六角格的水平直線,垂直線??
?
??????? WLine = Math.Sqrt(Math.Pow(wRad, 2) - Math.Pow(wRad / 2, 2))??
?
??????? hLine = Math.Sqrt(Math.Pow(HRad, 2) - Math.Pow(HRad / 2, 2))??
?
??????? '進行蜂窩式切合所必要的位偏移量??
?
??????? wSpce = (wRad - WLine) * 2??
?
??????? hspce = (HRad - hLine) * 2??
?
?
?
??????? '計當前六角格的中心點??
?
??????? cx = 32 - wRad + 165??
?
??????? cy = 32 - HRad + 190??
?
??????? cx = cx - wSpce??
?
??????? cy = cy - hspce * 2??
?
??????? '保存六角格的六個角的位置??
?
??????? lindes = New List(Of PointF)(6)??
?
??????? '北??
?
??????? Dim START2 As New PointF(cx, cy - HRad)??
?
??????? lindes.Add(START2)??
?
??????? '東北??
?
??????? lindes.Add(New PointF(cx + WLine, cy - HRad / 2))??
?
?
?
??????? '東南??
?
??????? lindes.Add(New PointF(cx + WLine, cy + HRad / 2))??
?
?
?
??????? '南??
?
??????? lindes.Add(New PointF(cx, cy + HRad))??
?
?
?
??????? '西南??
?
??????? lindes.Add(New Point(cx - WLine, cy + HRad / 2))??
?
?
?
??????? '西北??
?
??????? lindes.Add(New Point(cx - WLine, cy - HRad / 2))??
?
?
?
??????? '回到起點:北??
?
??????? lindes.Add(START2)??
?
??????? result = New GraphicsPath()??
?
?
?
??????? result.AddLines(lindes.ToArray())??
?
??????? result.CloseFigure()??
?
??????? Dim solidE As SolidBrush??
?
?
?
??????? solidE = New SolidBrush(Color.Black)??
?
??????? g.FillPath(solidE, result)??
?
??????? e.Graphics.DrawImage(bit, 0, 0)??
?
??????? isDraw = True?
?
?
?
??? End Sub?
?
?
?
?
?
??? Dim _PenColor As Color = Color.White??
?
??? Dim _penSize As Single = 2??
?
??? <Description("移動外邊六角形的顏色")> _??
?
??? <Browsable(True)> _??
?
???? Public Property PenColor() As Color??
?
??????? Get?
?
??????????? Return _PenColor??
?
??????? End Get?
?
??????? Set(ByVal value As Color)??
?
??????????? _PenColor = value??
?
??????? End Set?
?
??? End Property?
?
?
?
??? <Description("畫筆的大小")> _??
?
??? Public Property PenSize() As Single?
?
??????? Get?
?
??????????? Return _penSize??
?
??????? End Get?
?
??????? Set(ByVal value As Single)??
?
??????????? _penSize = value??
?
??????? End Set?
?
??? End Property?
?
?
?
?
?
?
?
?
?
?
?
?
?
??? ''' <summary>??
?
??? ''' 重繪方法??
?
??? ''' </summary>??
?
??? ''' <param name="e"></param>??
?
??? ''' <remarks></remarks>??
?
??? Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)??
?
??????? MyBase.OnPaint(e)??
?
??????? BulidHexes(New Size(16, 17), New Size(6, 13), e)??
?
??????? If ISContent = True Then?
?
??????????? Dim pen As New Pen(PenColor, PenSize)??
?
??????????? Dim GContent As Graphics = e.Graphics??
?
??????????? GContent.SmoothingMode = SmoothingMode.AntiAlias??
?
??????????? GContent.DrawPolygon(pen, lindes.ToArray())??
?
??????????? NowColor = Color.FromArgb(ColorList(index))??
?
??????????? OutcolorHander(NowColor, CurrentColor)??
?
?
?
??????? End If?
?
??? End Sub?
?
?
?
??? Dim MovePoint As PointF??
?
??? Dim ISContent As Boolean = False?
?
??? Dim lindes As List(Of PointF) = Nothing?
?
??? ''' <summary>??
?
??? ''' 鼠標的移動??
?
??? ''' </summary>??
?
??? ''' <param name="e"></param>??
?
??? ''' <remarks></remarks>??
?
??? Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Forms.MouseEventArgs)??
?
??????? MyBase.OnMouseMove(e)??
?
??????? If e.Button = Windows.Forms.MouseButtons.Left Then?
?
??????????? MovePoint.X = e.X??
?
??????????? MovePoint.Y = e.Y??
?
??????????? PointInContent(MovePoint)??
?
??????? End If?
?
??? End Sub?
?
??? ''' <summary>??
?
??? ''' 鼠標的單擊??
?
??? ''' </summary>??
?
??? ''' <param name="e"></param>??
?
??? ''' <remarks></remarks>??
?
??? Protected Overrides Sub OnMouseClick(ByVal e As System.Windows.Forms.MouseEventArgs)??
?
??????? MyBase.OnMouseClick(e)??
?
??????? If e.Button = Windows.Forms.MouseButtons.Left Then?
?
??????????? MovePoint.X = e.X??
?
??????????? MovePoint.Y = e.Y??
?
??????????? PointInContent(MovePoint)??
?
??????? End If?
?
??? End Sub?
?
?
?
?
?
??? Protected Overrides Sub OnMouseDoubleClick(ByVal e As System.Windows.Forms.MouseEventArgs)??
?
??????? MyBase.OnMouseDoubleClick(e)??
?
??????? If e.Button = Windows.Forms.MouseButtons.Left Then?
?
??????????? MovePoint.X = e.X??
?
??????????? MovePoint.Y = e.Y??
?
??????????? PointInContent(MovePoint)??
?
??????????? If ISContent = True Then?
?
??????????????? CurrentColor = Color.FromArgb(ColorList(index))??
?
??????????????? OutcolorHander(NowColor, CurrentColor)??
?
??????????? End If?
?
??????? End If?
?
??? End Sub?
?
?
?
?
?
??? ''' <summary>??
?
??? ''' 判斷當前點所在的六角形位置??
?
??? ''' </summary>??
?
??? ''' <param name="Mpoint"></param>??
?
??? ''' <remarks></remarks>??
?
??? Sub PointInContent(ByVal Mpoint As PointF)??
?
??????? index = 0??
?
??????? Dim gridsize As Size = New Size(16, 17)??
?
??????? Dim mapsize As Size = New Size(6, 13)??
?
??????? '六角格的水平半徑各垂直半徑??
?
?
?
??????? Dim wRad As Single = gridsize.Width / 2??
?
??????? Dim HRad As Single = gridsize.Height / 2??
?
??????? '六角格的水平直線,垂直線??
?
?
?
??????? Dim WLine As Single = Math.Sqrt(Math.Pow(wRad, 2) - Math.Pow(wRad / 2, 2))??
?
??????? Dim hLine As Single = Math.Sqrt(Math.Pow(HRad, 2) - Math.Pow(HRad / 2, 2))??
?
??????? '進行蜂窩式切合所必要的位偏移量??
?
?
?
??????? Dim wSpce As Single = (wRad - WLine) * 2??
?
??????? Dim hspce As Single = (HRad - hLine) * 2??
?
??????? '六角格的中心點??
?
??????? Dim cx As Single?
?
??????? Dim cy As Single?
?
??????? Dim boo As Boolean = False?
?
?
?
??????? For y As Integer = 0 To mapsize.Height - 1??
?
?
?
??????????? If boo = False Then?
?
??????????????? mapsize.Width += 1??
?
??????????? Else?
?
??????????????? mapsize.Width -= 1??
?
??????????? End If?
?
?
?
??????????? If y = 6 Then?
?
??????????????? boo = True?
?
??????????? End If?
?
?
?
??????????? For x As Integer = 0 To mapsize.Width - 1??
?
??????????????? '計當前六角格的中心點??
?
??????????????? cx = (gridsize.Width * (x + 1) - wRad) + 100??
?
??????????????? cy = (gridsize.Height * (y + 1) - HRad)??
?
??????????????? cx = cx - wSpce * x??
?
??????????????? cy = cy - hspce * y * 2??
?
??????????????? If boo = False Then?
?
?
?
??????????????????? cx = cx - WLine * mapsize.Width??
?
??????????????? Else?
?
??????????????????? cx = cx - WLine * mapsize.Width??
?
??????????????? End If?
?
??????????????? '保存六角格的六個角的位置??
?
??????????????? lindes = New List(Of PointF)(6)??
?
??????????????? '北??
?
??????????????? Dim start As New PointF(cx, cy - HRad)??
?
??????????????? lindes.Add(start)??
?
??????????????? '東北??
?
??????????????? lindes.Add(New PointF(cx + WLine, cy - HRad / 2))??
?
?
?
??????????????? '東南??
?
??????????????? lindes.Add(New PointF(cx + WLine, cy + HRad / 2))??
?
?
?
??????????????? '南??
?
??????????????? lindes.Add(New PointF(cx, cy + HRad))??
?
?
?
??????????????? '西南??
?
??????????????? lindes.Add(New Point(cx - WLine, cy + HRad / 2))??
?
?
?
??????????????? '西北??
?
??????????????? lindes.Add(New Point(cx - WLine, cy - HRad / 2))??
?
??????????????? '回到起點:北??
?
??????????????? lindes.Add(start)??
?
?
?
?
?
??????????????? '判斷點??
?
??????????????? If Mpoint.Y > lindes(0).Y And Mpoint.X < lindes(1).X And Mpoint.Y < lindes(3).Y And Mpoint.X > lindes(4).X Then?
?
??????????????????? ISContent = True?
?
??????????????????? Me.Invalidate()??
?
??????????????????? Exit Sub?
?
??????????????? End If?
?
?
?
??????????????? index += 1??
?
??????????? Next?
?
??????? Next?
?
?
?
??????? '=======================??
?
??????? '下左??
?
??????? wRad = 31 / 2??
?
??????? HRad = 32 / 2??
?
??????? '六角格的水平直線,垂直線??
?
??????? WLine = Math.Sqrt(Math.Pow(wRad, 2) - Math.Pow(wRad / 2, 2))??
?
??????? hLine = Math.Sqrt(Math.Pow(HRad, 2) - Math.Pow(HRad / 2, 2))??
?
??????? '進行蜂窩式切合所必要的位偏移量??
?
??????? wSpce = (wRad - WLine) * 2??
?
??????? hspce = (HRad - hLine) * 2??
?
?
?
??????? '計當前六角格的中心點??
?
??????? cx = 32 - wRad + 10??
?
??????? cy = 32 - HRad + 190??
?
??????? cx = cx - wSpce??
?
??????? cy = cy - hspce * 2??
?
??????? '保存六角格的六個角的位置??
?
??????? lindes = New List(Of PointF)(6)??
?
??????? '北??
?
??????? Dim START1 As New PointF(cx, cy - HRad)??
?
??????? lindes.Add(START1)??
?
??????? '東北??
?
??????? lindes.Add(New PointF(cx + WLine, cy - HRad / 2))??
?
?
?
??????? '東南??
?
??????? lindes.Add(New PointF(cx + WLine, cy + HRad / 2))??
?
?
?
??????? '南??
?
??????? lindes.Add(New PointF(cx, cy + HRad))??
?
?
?
??????? '西南??
?
??????? lindes.Add(New Point(cx - WLine, cy + HRad / 2))??
?
?
?
??????? '西北??
?
??????? lindes.Add(New Point(cx - WLine, cy - HRad / 2))??
?
?
?
??????? '回到起點:北??
?
??????? lindes.Add(START1)??
?
?
?
??????? '判斷點??
?
??????? If Mpoint.Y > lindes(0).Y And Mpoint.X < lindes(1).X And Mpoint.Y < lindes(3).Y And Mpoint.X > lindes(4).X Then?
?
??????????? ISContent = True?
?
??????????? Me.Invalidate()??
?
??????????? Exit Sub?
?
??????? End If?
?
??????? index += 1??
?
?
?
??????? '================??
?
??????? '下中??
?
??????? wRad = gridsize.Width / 2??
?
??????? HRad = gridsize.Height / 2??
?
??????? '六角格的水平直線,垂直線??
?
??????? WLine = Math.Sqrt(Math.Pow(wRad, 2) - Math.Pow(wRad / 2, 2))??
?
??????? hLine = Math.Sqrt(Math.Pow(HRad, 2) - Math.Pow(HRad / 2, 2))??
?
??????? '進行蜂窩式切合所必要的位偏移量??
?
??????? wSpce = (wRad - WLine) * 2??
?
??????? hspce = (HRad - hLine) * 2??
?
??????? Dim len As Integer = 7??
?
??????? For y As Integer = 0 To 1??
?
??????????? If y = 1 Then?
?
??????????????? len = 6??
?
??????????? End If?
?
??????????? For x As Integer = 0 To len??
?
??????????????? '計當前六角格的中心點??
?
??????????????? cx = (gridsize.Width * (x + 1) - wRad) + 45??
?
??????????????? cy = (gridsize.Height * (y + 1) - HRad) + 180??
?
??????????????? cx = cx - wSpce * x??
?
??????????????? cy = cy - hspce * y * 2??
?
??????????????? If y = 1 Then?
?
?
?
??????????????????? cx = cx + WLine??
?
??????????????? End If?
?
??????????????? '保存六角格的六個角的位置??
?
??????????????? lindes = New List(Of PointF)(6)??
?
??????????????? '北??
?
??????????????? Dim start As New PointF(cx, cy - HRad)??
?
??????????????? lindes.Add(start)??
?
??????????????? '東北??
?
??????????????? lindes.Add(New PointF(cx + WLine, cy - HRad / 2))??
?
?
?
??????????????? '東南??
?
??????????????? lindes.Add(New PointF(cx + WLine, cy + HRad / 2))??
?
?
?
??????????????? '南??
?
??????????????? lindes.Add(New PointF(cx, cy + HRad))??
?
?
?
??????????????? '西南??
?
??????????????? lindes.Add(New Point(cx - WLine, cy + HRad / 2))??
?
?
?
??????????????? '西北??
?
??????????????? lindes.Add(New Point(cx - WLine, cy - HRad / 2))??
?
?
?
??????????????? '回到起點:北??
?
??????????????? lindes.Add(start)??
?
?
?
??????????????? '判斷點??
?
??????????????? If Mpoint.Y > lindes(0).Y And Mpoint.X < lindes(1).X And Mpoint.Y < lindes(3).Y And Mpoint.X > lindes(4).X Then?
?
??????????????????? ISContent = True?
?
??????????????????? Me.Invalidate()??
?
??????????????????? Exit Sub?
?
??????????????? End If?
?
??????????????? index += 1??
?
??????????? Next?
?
??????? Next?
?
?
?
?
?
??????? '==============??
?
??????? '下右??
?
??????? wRad = 31 / 2??
?
??????? HRad = 32 / 2??
?
??????? '六角格的水平直線,垂直線??
?
??????? WLine = Math.Sqrt(Math.Pow(wRad, 2) - Math.Pow(wRad / 2, 2))??
?
??????? hLine = Math.Sqrt(Math.Pow(HRad, 2) - Math.Pow(HRad / 2, 2))??
?
??????? '進行蜂窩式切合所必要的位偏移量??
?
??????? wSpce = (wRad - WLine) * 2??
?
??????? hspce = (HRad - hLine) * 2??
?
?
?
??????? '計當前六角格的中心點??
?
??????? cx = 32 - wRad + 165??
?
??????? cy = 32 - HRad + 190??
?
??????? cx = cx - wSpce??
?
??????? cy = cy - hspce * 2??
?
??????? '保存六角格的六個角的位置??
?
??????? lindes = New List(Of PointF)(6)??
?
??????? '北??
?
??????? Dim START2 As New PointF(cx, cy - HRad)??
?
??????? lindes.Add(START2)??
?
??????? '東北??
?
??????? lindes.Add(New PointF(cx + WLine, cy - HRad / 2))??
?
?
?
??????? '東南??
?
??????? lindes.Add(New PointF(cx + WLine, cy + HRad / 2))??
?
?
?
??????? '南??
?
??????? lindes.Add(New PointF(cx, cy + HRad))??
?
?
?
??????? '西南??
?
??????? lindes.Add(New Point(cx - WLine, cy + HRad / 2))??
?
?
?
??????? '西北??
?
??????? lindes.Add(New Point(cx - WLine, cy - HRad / 2))??
?
?
?
??????? '回到起點:北??
?
??????? lindes.Add(START2)??
?
?
?
?
?
??????? '判斷點??
?
??????? If Mpoint.Y > lindes(0).Y And Mpoint.X < lindes(1).X And Mpoint.Y < lindes(3).Y And Mpoint.X > lindes(4).X Then?
?
??????????? ISContent = True?
?
??????????? Me.Invalidate()??
?
??????????? Exit Sub?
?
??????? End If?
?
????????
?
??? End Sub?
?
?
?
End Class?

Imports System.Drawing

Imports System.Drawing.Drawing2D

Imports System.Drawing.Imaging

Imports System.Collections

Imports System.ComponentModel

Imports System.Collections.Generic

Public Class ColorControl

??? Dim bit As New Bitmap(200, 230)

??? Dim isDraw As Boolean = False

??? Dim index As Integer = 0

??? Dim g As Graphics = Graphics.FromImage(bit)

??? Dim _NowColor As Color = Color.Transparent '現在顏色

??? Dim _CurrentColor As Color = Color.Transparent '當前顏前

??? '輸出顏色

??? Public Event OutputColorEvent(ByVal NColor As Color, ByVal CColor As Color)

??? '觸發事件

??? Sub OutcolorHander(ByVal nColor As Color, ByVal CColor As Color)

??????? RaiseEvent OutputColorEvent(nColor, CColor)

??? End Sub

??? '顏色表

??? Dim ColorList() As Integer = {&HFF003366, &HFF336699, &HFF3366CC, &HFF003399, &HFF000099, &HFF0000CC, &HFF000066, _

&HFF006666, &HFF006699, &HFF0099CC, &HFF0066CC, &HFF0033CC, &HFF0000FF, &HFF3333FF, &HFF333399, _

&HFF008080, &HFF009999, &HFF33CCCC, &HFF00CCFF, &HFF0099FF, &HFF0066FF, &HFF3366FF, &HFF3333CC, &HFF666699, _

&HFF339966, &HFF00CC99, &HFF00FFCC, &HFF00FFFF, &HFF33CCFF, &HFF3399FF, &HFF6699FF, &HFF6666FF, &HFF6600FF, &HFF6600CC, _

&HFF339933, &HFF00CC66, &HFF00FF99, &HFF66FFCC, &HFF66FFFF, &HFF66CCFF, &HFF9999FF, &HFF9999FF, &HFF9966FF, &HFF9933FF, &HFF9900FF, _

&HFF006600, &HFF00CC00, &HFF00FF00, &HFF66FF99, &HFF99FFCC, &HFFCCFFFF, &HFFCCECFF, &HFFCCCCFF, &HFFCC99FF, &HFFCC66FF, &HFFCC00FF, &HFF9900CC, _

&HFF003300, &HFF008000, &HFF33CC33, &HFF66FF66, &HFF99FF99, &HFFCCFFCC, &HFFFFFFFF, &HFFFFCCFF, &HFFFF99FF, &HFFFF66FF, &HFFFF00FF, &HFFCC00CC, &HFF660066, _

&HFF336600, &HFF009900, &HFF66FF33, &HFF99FF66, &HFFCCFF99, &HFFFFFFCC, &HFFFFCCCC, &HFFFF99CC, &HFFFF66CC, &HFFFF33CC, &HFFCC0099, &HFF800080, _

&HFF333300, &HFF669900, &HFF99FF33, &HFFCCFF66, &HFFFFFF99, &HFFFFCC99, &HFFFF9999, &HFFFF6699, &HFFFF3399, &HFFCC3399, &HFF800080, _

&HFF666633, &HFF99CC00, &HFFCCFF33, &HFFFFFF66, &HFFFFCC66, &HFFFF9966, &HFFFF7C80, &HFFFF0066, &HFFD60093, &HFF993366, _

&HFF808000, &HFFCCCC00, &HFFFFFF00, &HFFFFCC00, &HFFFF9933, &HFFFF6600, &HFFFF5050, &HFFCC0066, &HFF660033, _

&HFF996633, &HFFCC9900, &HFFFF9900, &HFFCC6600, &HFFFF3300, &HFFFF0000, &HFFCC0000, &HFF990033, _

&HFF663300, &HFF996600, &HFFCC3300, &HFF993300, &HFF990000, &HFF800000, &HFFA50021, _

&HFFFFFFFF, _

&HFFF8F8F8, &HFFDDDDDD, &HFFB2B2B2, &HFF808080, &HFF5F5F5F, &HFF333333, &HFF1C1C1C, &HFF080808, _

&HFFEAEAEA, &HFFC0C0C0, &HFF969696, &HFF777777, &HFF4D4D4D, &HFF292929, &HFF111111, _

&HFF000000}

??? Sub New()

??????? ' This call is required by the Windows Form Designer.

??????? InitializeComponent()

??????? ' Add any initialization after the InitializeComponent() call.

??????? SetStyle(ControlStyles.AllPaintingInWmPaint, True)

??????? SetStyle(ControlStyles.StandardDoubleClick, True)

??????? SetStyle(ControlStyles.ResizeRedraw, True)

??????? SetStyle(ControlStyles.UserPaint, True)

??????? SetStyle(ControlStyles.OptimizedDoubleBuffer, True)

??????? g.SmoothingMode = SmoothingMode.HighQuality

??? End Sub

??? <Description("現在顏色")> _

??? <Browsable(True)> _

??? Public Property NowColor() As Color

??????? Get

??????????? Return _NowColor

??????? End Get

??????? Set(ByVal value As Color)

??????????? _NowColor = value

??????? End Set

??? End Property

??? <Description("現在顏色")> _

??? <Browsable(True)> _

??? Public Property CurrentColor() As Color

??????? Get

??????????? Return _CurrentColor

??????? End Get

??????? Set(ByVal value As Color)

??????????? _CurrentColor = value

??????? End Set

??? End Property

??? ''' <summary>

??? '''繪制六角形上方

??? ''' </summary>

??? ''' <param name="gridSize">繪制六角形的長寬</param>

??? ''' <param name="mapSize">繪制個數</param>

??? ''' <param name="e">繪制對象</param>

??? ''' <remarks></remarks>

??? Public Sub BulidHexes(ByVal gridSize As Size, ByVal mapSize As Size, ByVal e As PaintEventArgs)

??????? If isDraw = True Then

??????????? e.Graphics.DrawImage(bit, 0, 0)

??????????? Exit Sub

??????? End If

??????? Dim lindes As List(Of PointF) = Nothing

??????? '六角格的水平半徑各垂直半徑

??????? Dim wRad As Single = gridSize.Width / 2

??????? Dim HRad As Single = gridSize.Height / 2

??????? '六角格的水平直線,垂直線

??????? Dim WLine As Single = Math.Sqrt(Math.Pow(wRad, 2) - Math.Pow(wRad / 2, 2))

??????? Dim hLine As Single = Math.Sqrt(Math.Pow(HRad, 2) - Math.Pow(HRad / 2, 2))

??????? '進行蜂窩式切合所必要的位偏移量

??????? Dim wSpce As Single = (wRad - WLine) * 2

??????? Dim hspce As Single = (HRad - hLine) * 2

??????? '六角格的中心點

??????? Dim cx As Single

??????? Dim cy As Single

??????? Dim isCenter As Boolean = False

??????? Dim result As GraphicsPath

??????? For y As Integer = 0 To mapSize.Height - 1

??????????? If isCenter = False Then

??????????????? mapSize.Width += 1

??????????? Else

??????????????? mapSize.Width -= 1

??????????? End If

??????????? If y = 6 Then

??????????????? isCenter = True

??????????? End If

??????????? For x As Integer = 0 To mapSize.Width - 1

??????????????? '計當前六角格的中心點

??????????????? cx = (gridSize.Width * (x + 1) - wRad) + 100

??????????????? cy = (gridSize.Height * (y + 1) - HRad)

??????????????? cx = cx - wSpce * x

??????????????? cy = cy - hspce * y * 2

??????????????? If isCenter = False Then

??????????????????? cx = cx - WLine * mapSize.Width

??????????????? Else

??????????????????? cx = cx - WLine * mapSize.Width

??????????????? End If

??????????????? '保存六角格的六個角的位置

??????????????? lindes = New List(Of PointF)(6)

??????????????? '北

??????????????? Dim start As New PointF(cx, cy - HRad)

??????????????? lindes.Add(start)

??????????????? '東北

??????????????? lindes.Add(New PointF(cx + WLine, cy - HRad / 2))

??????????????? '東南

??????????????? lindes.Add(New PointF(cx + WLine, cy + HRad / 2))

??????????????? '南

??????????????? lindes.Add(New PointF(cx, cy + HRad))

??????????????? '西南

??????????????? lindes.Add(New Point(cx - WLine, cy + HRad / 2))

??????????????? '西北

??????????????? lindes.Add(New Point(cx - WLine, cy - HRad / 2))

??????????????? '回到起點:北

??????????????? lindes.Add(start)

??????????????? result = New GraphicsPath()

??????????????? result.AddLines(lindes.ToArray())

??????????????? result.CloseFigure()

??????????????? Dim solidB As SolidBrush

??????????????? solidB = New SolidBrush(Color.FromArgb(ColorList(index)))

??????????????? index += 1

??????????????? g.FillPath(solidB, result)

??????????? Next

??????? Next

??????? '=======================

??????? '下左

??????? wRad = 31 / 2

??????? HRad = 32 / 2

??????? '六角格的水平直線,垂直線

??????? WLine = Math.Sqrt(Math.Pow(wRad, 2) - Math.Pow(wRad / 2, 2))

??????? hLine = Math.Sqrt(Math.Pow(HRad, 2) - Math.Pow(HRad / 2, 2))

??????? '進行蜂窩式切合所必要的位偏移量

??????? wSpce = (wRad - WLine) * 2

??????? hspce = (HRad - hLine) * 2

???

??????????? '計當前六角格的中心點

??????? cx = 32 - wRad + 10

??????? cy = 32 - HRad + 190

??????? cx = cx - wSpce

??????? cy = cy - hspce * 2

??????????? '保存六角格的六個角的位置

??????????? lindes = New List(Of PointF)(6)

??????? '北

??????? Dim START1 As New PointF(cx, cy - HRad)

??????? lindes.Add(START1)

??????????? '東北

??????????? lindes.Add(New PointF(cx + WLine, cy - HRad / 2))

??????????? '東南

??????????? lindes.Add(New PointF(cx + WLine, cy + HRad / 2))

??????????? '南

??????????? lindes.Add(New PointF(cx, cy + HRad))

??????????? '西南

??????????? lindes.Add(New Point(cx - WLine, cy + HRad / 2))

??????????? '西北

??????????? lindes.Add(New Point(cx - WLine, cy - HRad / 2))

??????????? '回到起點:北

??????? lindes.Add(START1)

??????????? result = New GraphicsPath()

??????????? result.AddLines(lindes.ToArray())

??????????? result.CloseFigure()

??????? Dim solidX As SolidBrush

??????? solidX = New SolidBrush(Color.FromArgb(ColorList(index)))

??????? index += 1

??????? g.FillPath(solidX, result)

??????? '================

??????? '下中

??????? wRad = gridSize.Width / 2

??????? HRad = gridSize.Height / 2

??????? '六角格的水平直線,垂直線

??????? WLine = Math.Sqrt(Math.Pow(wRad, 2) - Math.Pow(wRad / 2, 2))

??????? hLine = Math.Sqrt(Math.Pow(HRad, 2) - Math.Pow(HRad / 2, 2))

??????? '進行蜂窩式切合所必要的位偏移量

??????? wSpce = (wRad - WLine) * 2

??????? hspce = (HRad - hLine) * 2

??????? Dim len As Integer = 7

??????? For y As Integer = 0 To 1

??????????? If y = 1 Then

??????????????? len = 6

??????????? End If

??????????? For x As Integer = 0 To len

??????????????? '計當前六角格的中心點

??????????????? cx = (gridSize.Width * (x + 1) - wRad) + 45

??????????????? cy = (gridSize.Height * (y + 1) - HRad) + 180

??????????????? cx = cx - wSpce * x

??????????????? cy = cy - hspce * y * 2

??????????????? If y = 1 Then

??????????????????? cx = cx + WLine

??????????????? End If

??????????????? '保存六角格的六個角的位置

??????????????? lindes = New List(Of PointF)(6)

??????????????? '北

??????????????? Dim start As New PointF(cx, cy - HRad)

??????????????? lindes.Add(start)

??????????????? '東北

??????????????? lindes.Add(New PointF(cx + WLine, cy - HRad / 2))

??????????????? '東南

??????????????? lindes.Add(New PointF(cx + WLine, cy + HRad / 2))

??????????????? '南

??????????????? lindes.Add(New PointF(cx, cy + HRad))

??????????????? '西南

??????????????? lindes.Add(New Point(cx - WLine, cy + HRad / 2))

??????????????? '西北

??????????????? lindes.Add(New Point(cx - WLine, cy - HRad / 2))

??????????????? '回到起點:北

??????????????? lindes.Add(start)

??????????????? result = New GraphicsPath()

??????????????? result.AddLines(lindes.ToArray())

??????????????? Dim solidY As SolidBrush

??????????????? solidY = New SolidBrush(Color.FromArgb(ColorList(index)))

??????????????? index += 1

??????????????? g.FillPath(solidY, result)

??????????? Next

??????? Next

??????? '==============

??????? '下右

??????? wRad = 31 / 2

??????? HRad = 32 / 2

??????? '六角格的水平直線,垂直線

??????? WLine = Math.Sqrt(Math.Pow(wRad, 2) - Math.Pow(wRad / 2, 2))

??????? hLine = Math.Sqrt(Math.Pow(HRad, 2) - Math.Pow(HRad / 2, 2))

??????? '進行蜂窩式切合所必要的位偏移量

??????? wSpce = (wRad - WLine) * 2

??????? hspce = (HRad - hLine) * 2

??????? '計當前六角格的中心點

??????? cx = 32 - wRad + 165

??????? cy = 32 - HRad + 190

??????? cx = cx - wSpce

??????? cy = cy - hspce * 2

??????? '保存六角格的六個角的位置

??????? lindes = New List(Of PointF)(6)

??????? '北

??????? Dim START2 As New PointF(cx, cy - HRad)

??????? lindes.Add(START2)

??????? '東北

??????? lindes.Add(New PointF(cx + WLine, cy - HRad / 2))

??????? '東南

??????? lindes.Add(New PointF(cx + WLine, cy + HRad / 2))

??????? '南

??????? lindes.Add(New PointF(cx, cy + HRad))

??????? '西南

??????? lindes.Add(New Point(cx - WLine, cy + HRad / 2))

??????? '西北

??????? lindes.Add(New Point(cx - WLine, cy - HRad / 2))

??????? '回到起點:北

??????? lindes.Add(START2)

??????? result = New GraphicsPath()

??????? result.AddLines(lindes.ToArray())

??????? result.CloseFigure()

??????? Dim solidE As SolidBrush

??????? solidE = New SolidBrush(Color.Black)

??????? g.FillPath(solidE, result)

??????? e.Graphics.DrawImage(bit, 0, 0)

??????? isDraw = True

??? End Sub

??? Dim _PenColor As Color = Color.White

??? Dim _penSize As Single = 2

??? <Description("移動外邊六角形的顏色")> _

??? <Browsable(True)> _

???? Public Property PenColor() As Color

??????? Get

??????????? Return _PenColor

??????? End Get

??????? Set(ByVal value As Color)

??????????? _PenColor = value

??????? End Set

??? End Property

??? <Description("畫筆的大小")> _

??? Public Property PenSize() As Single

??????? Get

??????????? Return _penSize

??????? End Get

??????? Set(ByVal value As Single)

??????????? _penSize = value

??????? End Set

??? End Property

??? ''' <summary>

??? ''' 重繪方法

??? ''' </summary>

??? ''' <param name="e"></param>

??? ''' <remarks></remarks>

??? Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)

??????? MyBase.OnPaint(e)

??????? BulidHexes(New Size(16, 17), New Size(6, 13), e)

??????? If ISContent = True Then

??????????? Dim pen As New Pen(PenColor, PenSize)

??????????? Dim GContent As Graphics = e.Graphics

??????????? GContent.SmoothingMode = SmoothingMode.AntiAlias

??????????? GContent.DrawPolygon(pen, lindes.ToArray())

??????????? NowColor = Color.FromArgb(ColorList(index))

??????????? OutcolorHander(NowColor, CurrentColor)

??????? End If

??? End Sub

??? Dim MovePoint As PointF

??? Dim ISContent As Boolean = False

??? Dim lindes As List(Of PointF) = Nothing

??? ''' <summary>

??? ''' 鼠標的移動

??? ''' </summary>

??? ''' <param name="e"></param>

??? ''' <remarks></remarks>

??? Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Forms.MouseEventArgs)

??????? MyBase.OnMouseMove(e)

??????? If e.Button = Windows.Forms.MouseButtons.Left Then

??????????? MovePoint.X = e.X

??????????? MovePoint.Y = e.Y

??????????? PointInContent(MovePoint)

??????? End If

??? End Sub

??? ''' <summary>

??? ''' 鼠標的單擊

??? ''' </summary>

??? ''' <param name="e"></param>

??? ''' <remarks></remarks>

??? Protected Overrides Sub OnMouseClick(ByVal e As System.Windows.Forms.MouseEventArgs)

??????? MyBase.OnMouseClick(e)

??????? If e.Button = Windows.Forms.MouseButtons.Left Then

??????????? MovePoint.X = e.X

??????????? MovePoint.Y = e.Y

??????????? PointInContent(MovePoint)

??????? End If

??? End Sub

??? Protected Overrides Sub OnMouseDoubleClick(ByVal e As System.Windows.Forms.MouseEventArgs)

??????? MyBase.OnMouseDoubleClick(e)

??????? If e.Button = Windows.Forms.MouseButtons.Left Then

??????????? MovePoint.X = e.X

??????????? MovePoint.Y = e.Y

??????????? PointInContent(MovePoint)

??????????? If ISContent = True Then

??????????????? CurrentColor = Color.FromArgb(ColorList(index))

??????????????? OutcolorHander(NowColor, CurrentColor)

??????????? End If

??????? End If

??? End Sub

??? ''' <summary>

??? ''' 判斷當前點所在的六角形位置

??? ''' </summary>

??? ''' <param name="Mpoint"></param>

??? ''' <remarks></remarks>

??? Sub PointInContent(ByVal Mpoint As PointF)

??????? index = 0

??????? Dim gridsize As Size = New Size(16, 17)

??????? Dim mapsize As Size = New Size(6, 13)

??????? '六角格的水平半徑各垂直半徑

??????? Dim wRad As Single = gridsize.Width / 2

??????? Dim HRad As Single = gridsize.Height / 2

??????? '六角格的水平直線,垂直線

??????? Dim WLine As Single = Math.Sqrt(Math.Pow(wRad, 2) - Math.Pow(wRad / 2, 2))

??????? Dim hLine As Single = Math.Sqrt(Math.Pow(HRad, 2) - Math.Pow(HRad / 2, 2))

??????? '進行蜂窩式切合所必要的位偏移量

??????? Dim wSpce As Single = (wRad - WLine) * 2

??????? Dim hspce As Single = (HRad - hLine) * 2

??????? '六角格的中心點

??????? Dim cx As Single

??????? Dim cy As Single

??????? Dim boo As Boolean = False

??????? For y As Integer = 0 To mapsize.Height - 1

??????????? If boo = False Then

??????????????? mapsize.Width += 1

??????????? Else

??????????????? mapsize.Width -= 1

??????????? End If

??????????? If y = 6 Then

??????????????? boo = True

??????????? End If

??????????? For x As Integer = 0 To mapsize.Width - 1

??????????????? '計當前六角格的中心點

??????????????? cx = (gridsize.Width * (x + 1) - wRad) + 100

??????????????? cy = (gridsize.Height * (y + 1) - HRad)

??????????????? cx = cx - wSpce * x

??????????????? cy = cy - hspce * y * 2

??????????????? If boo = False Then

??????????????????? cx = cx - WLine * mapsize.Width

??????????????? Else

??????????????????? cx = cx - WLine * mapsize.Width

??????????????? End If

??????????????? '保存六角格的六個角的位置

??????????????? lindes = New List(Of PointF)(6)

??????????????? '北

??????????????? Dim start As New PointF(cx, cy - HRad)

??????????????? lindes.Add(start)

??????????????? '東北

??????????????? lindes.Add(New PointF(cx + WLine, cy - HRad / 2))

??????????????? '東南

??????????????? lindes.Add(New PointF(cx + WLine, cy + HRad / 2))

??????????????? '南

??????????????? lindes.Add(New PointF(cx, cy + HRad))

??????????????? '西南

??????????????? lindes.Add(New Point(cx - WLine, cy + HRad / 2))

??????????????? '西北

??????????????? lindes.Add(New Point(cx - WLine, cy - HRad / 2))

??????????????? '回到起點:北

??????????????? lindes.Add(start)

??????????????? '判斷點

??????????????? If Mpoint.Y > lindes(0).Y And Mpoint.X < lindes(1).X And Mpoint.Y < lindes(3).Y And Mpoint.X > lindes(4).X Then

??????????????????? ISContent = True

??????????????????? Me.Invalidate()

??????????????????? Exit Sub

??????????????? End If

??????????????? index += 1

??????????? Next

??????? Next

??????? '=======================

??????? '下左

??????? wRad = 31 / 2

??????? HRad = 32 / 2

??????? '六角格的水平直線,垂直線

??????? WLine = Math.Sqrt(Math.Pow(wRad, 2) - Math.Pow(wRad / 2, 2))

??????? hLine = Math.Sqrt(Math.Pow(HRad, 2) - Math.Pow(HRad / 2, 2))

??????? '進行蜂窩式切合所必要的位偏移量

??????? wSpce = (wRad - WLine) * 2

??????? hspce = (HRad - hLine) * 2

??????? '計當前六角格的中心點

??????? cx = 32 - wRad + 10

??????? cy = 32 - HRad + 190

??????? cx = cx - wSpce

??????? cy = cy - hspce * 2

??????? '保存六角格的六個角的位置

??????? lindes = New List(Of PointF)(6)

??????? '北

??????? Dim START1 As New PointF(cx, cy - HRad)

??????? lindes.Add(START1)

??????? '東北

??????? lindes.Add(New PointF(cx + WLine, cy - HRad / 2))

??????? '東南

??????? lindes.Add(New PointF(cx + WLine, cy + HRad / 2))

??????? '南

??????? lindes.Add(New PointF(cx, cy + HRad))

??????? '西南

??????? lindes.Add(New Point(cx - WLine, cy + HRad / 2))

??????? '西北

??????? lindes.Add(New Point(cx - WLine, cy - HRad / 2))

??????? '回到起點:北

??????? lindes.Add(START1)

??????? '判斷點

??????? If Mpoint.Y > lindes(0).Y And Mpoint.X < lindes(1).X And Mpoint.Y < lindes(3).Y And Mpoint.X > lindes(4).X Then

??????????? ISContent = True

??????????? Me.Invalidate()

??????????? Exit Sub

??????? End If

??????? index += 1

??????? '================

??????? '下中

??????? wRad = gridsize.Width / 2

??????? HRad = gridsize.Height / 2

??????? '六角格的水平直線,垂直線

??????? WLine = Math.Sqrt(Math.Pow(wRad, 2) - Math.Pow(wRad / 2, 2))

??????? hLine = Math.Sqrt(Math.Pow(HRad, 2) - Math.Pow(HRad / 2, 2))

??????? '進行蜂窩式切合所必要的位偏移量

??????? wSpce = (wRad - WLine) * 2

??????? hspce = (HRad - hLine) * 2

??????? Dim len As Integer = 7

??????? For y As Integer = 0 To 1

??????????? If y = 1 Then

??????????????? len = 6

??????????? End If

??????????? For x As Integer = 0 To len

??????????????? '計當前六角格的中心點

??????????????? cx = (gridsize.Width * (x + 1) - wRad) + 45

??????????????? cy = (gridsize.Height * (y + 1) - HRad) + 180

??????????????? cx = cx - wSpce * x

??????????????? cy = cy - hspce * y * 2

??????????????? If y = 1 Then

??????????????????? cx = cx + WLine

??????????????? End If

??????????????? '保存六角格的六個角的位置

??????????????? lindes = New List(Of PointF)(6)

??????????????? '北

??????????????? Dim start As New PointF(cx, cy - HRad)

??????????????? lindes.Add(start)

??????????????? '東北

??????????????? lindes.Add(New PointF(cx + WLine, cy - HRad / 2))

??????????????? '東南

??????????????? lindes.Add(New PointF(cx + WLine, cy + HRad / 2))

??????????????? '南

??????????????? lindes.Add(New PointF(cx, cy + HRad))

??????????????? '西南

??????????????? lindes.Add(New Point(cx - WLine, cy + HRad / 2))

??????????????? '西北

??????????????? lindes.Add(New Point(cx - WLine, cy - HRad / 2))

??????????????? '回到起點:北

??????????????? lindes.Add(start)

??????????????? '判斷點

??????????????? If Mpoint.Y > lindes(0).Y And Mpoint.X < lindes(1).X And Mpoint.Y < lindes(3).Y And Mpoint.X > lindes(4).X Then

??????????????????? ISContent = True

??????????????????? Me.Invalidate()

??????????????????? Exit Sub

??????????????? End If

??????????????? index += 1

??????????? Next

??????? Next

??????? '==============

??????? '下右

??????? wRad = 31 / 2

??????? HRad = 32 / 2

??????? '六角格的水平直線,垂直線

??????? WLine = Math.Sqrt(Math.Pow(wRad, 2) - Math.Pow(wRad / 2, 2))

??????? hLine = Math.Sqrt(Math.Pow(HRad, 2) - Math.Pow(HRad / 2, 2))

??????? '進行蜂窩式切合所必要的位偏移量

??????? wSpce = (wRad - WLine) * 2

??????? hspce = (HRad - hLine) * 2

??????? '計當前六角格的中心點

??????? cx = 32 - wRad + 165

??????? cy = 32 - HRad + 190

??????? cx = cx - wSpce

??????? cy = cy - hspce * 2

??????? '保存六角格的六個角的位置

??????? lindes = New List(Of PointF)(6)

??????? '北

??????? Dim START2 As New PointF(cx, cy - HRad)

??????? lindes.Add(START2)

??????? '東北

??????? lindes.Add(New PointF(cx + WLine, cy - HRad / 2))

??????? '東南

??????? lindes.Add(New PointF(cx + WLine, cy + HRad / 2))

??????? '南

??????? lindes.Add(New PointF(cx, cy + HRad))

??????? '西南

??????? lindes.Add(New Point(cx - WLine, cy + HRad / 2))

??????? '西北

??????? lindes.Add(New Point(cx - WLine, cy - HRad / 2))

??????? '回到起點:北

??????? lindes.Add(START2)

??????? '判斷點

??????? If Mpoint.Y > lindes(0).Y And Mpoint.X < lindes(1).X And Mpoint.Y < lindes(3).Y And Mpoint.X > lindes(4).X Then

??????????? ISContent = True

??????????? Me.Invalidate()

??????????? Exit Sub

??????? End If

?????

??? End Sub

End Classview plaincopy to clipboardprint?
??

?view plaincopy to pdf?clipboardprint?
<FONT size=4>在窗體是使用這個控件</FONT>?

在窗體是使用這個控件view plaincopy to clipboardprint?
<FONT size=2>效果如下圖:</FONT>?

效果如下圖:

只要處理一個事件(OutcolorEvnet)IC交易網就可以取得當前顏色與新增顏色.

下面是我的代碼。大家在修改顏色時根據自己具體的設置修改一個就行了。使用起來挺方便的

view plaincopy to clipboardprint?
Private Sub ColorControl1_OutputColorEvent(ByVal NColor As System.Drawing.Color, ByVal CColor As System.Drawing.Color) Handles ColorControl1.OutputColorEvent??
?
?????? Panel1.BackColor = NColor??
?
?????? Panel2.BackColor = CColor??
?
?? End Sub?

?Private Sub ColorControl1_OutputColorEvent(ByVal NColor As System.Drawing.Color, ByVal CColor As System.Drawing.Color) Handles ColorControl1.OutputColorEvent

??????? Panel1.BackColor = NColor

??????? Panel2.BackColor = CColor

??? End Sub

轉載于:https://www.cnblogs.com/aspxnets/archive/2011/06/29/2093811.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的VB.NET 开发ColorPicker例子的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。