-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathColors.vb
More file actions
152 lines (124 loc) · 5.51 KB
/
Colors.vb
File metadata and controls
152 lines (124 loc) · 5.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
Imports System.Text.RegularExpressions
Namespace CardonerSistemas
Module Colors
#Region "Hexadecimal validation"
' Hex RGB
Friend Const RegExHexadecimalRgbSingleDigits As String = "^#(?:[0-9a-fA-F]{3})$"
Friend Const RegExHexadecimalRgbDoubleDigits As String = "^#(?:[0-9a-fA-F]{6})$"
Friend Const RegExHexadecimalRgbBothDigits As String = "^#(?:[0-9a-fA-F]{3,6})$"
' Hex ARGB
Friend Const RegExHexadecimalArgbSingleDigits As String = "^#(?:[0-9a-fA-F]{4})$"
Friend Const RegExHexadecimalArgbDoubleDigits As String = "^#(?:[0-9a-fA-F]{8})$"
Friend Const RegExHexadecimalArgbBothDigits As String = "^#(?:[0-9a-fA-F]{4,8})$"
' Hex RGB or ARGB
Friend Const RegExHexadecimalRgbOrArgbSingleDigits As String = "^#(?:[0-9a-fA-F]{3,4})$"
Friend Const RegExHexadecimalRgbOrArgbDoubleDigits As String = "^#(?:[0-9a-fA-F]{6,8})$"
Friend Const RegExHexadecimalRgbOrArgbBothDigits As String = "^#(?:[0-9a-fA-F]{3,4,6,8})$"
Private Function IsValidHexColor(value As String, evaluateExpression As String) As Boolean
If String.IsNullOrEmpty(value) Then
Return False
End If
Try
Return Regex.IsMatch(value, evaluateExpression, RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250))
Catch ex As Exception
Return False
End Try
End Function
#End Region
#Region "Serialization Get"
Friend Function GetFromHexString(value As String, ByRef color As Color, Optional evaluateExpression As String = RegExHexadecimalRgbOrArgbBothDigits, Optional valueDefault As String = Nothing) As Boolean
If String.IsNullOrWhiteSpace(value) AndAlso Not String.IsNullOrWhiteSpace(valueDefault) Then
value = valueDefault
End If
If Not String.IsNullOrWhiteSpace(value) Then
value = value.Trim()
If value.StartsWith("#") AndAlso IsValidHexColor(value, evaluateExpression) Then
Try
color = ColorTranslator.FromHtml(value)
Return True
Catch ex As Exception
ErrorHandler.ProcessError(ex, "Error al convertir el valor en un color.")
End Try
End If
End If
Return False
End Function
Friend Function GetFromNameString(value As String, ByRef color As Color, Optional valueDefault As String = Nothing) As Boolean
If String.IsNullOrWhiteSpace(value) AndAlso Not String.IsNullOrWhiteSpace(valueDefault) Then
value = valueDefault
End If
If Not String.IsNullOrWhiteSpace(value) Then
value = value.Trim()
Dim namedColor As Color
namedColor = Color.FromName(value)
If (CShort(namedColor.A) + namedColor.R + namedColor.G + namedColor.B > 0) Then
color = namedColor
Return True
End If
End If
Return False
End Function
Friend Function GetFromHexOrNameString(value As String, ByRef color As Color, Optional evaluateExpression As String = RegExHexadecimalRgbOrArgbBothDigits, Optional valueDefault As String = Nothing) As Boolean
If String.IsNullOrWhiteSpace(value) AndAlso Not String.IsNullOrWhiteSpace(valueDefault) Then
value = valueDefault
End If
If Not String.IsNullOrWhiteSpace(value) Then
value = value.Trim()
If value.StartsWith("#") Then
Return GetFromHexString(value, color, evaluateExpression, valueDefault)
Else
Return GetFromNameString(value, color, valueDefault)
End If
End If
Return False
End Function
#End Region
#Region "Serialization Set"
Friend Function SetToHexRgbString(color As Color) As String
If color.IsEmpty Then
Return String.Empty
Else
Return $"#{color.R:X2}{color.G:X2}{color.B:X2}"
End If
End Function
Friend Function SetToHexArgbString(color As Color) As String
If color.IsEmpty Then
Return String.Empty
Else
Return $"#{color.A:X2}{color.R:X2}{color.G:X2}{color.B:X2}"
End If
End Function
Friend Function SetToNamedOrHexRgbString(color As Color) As String
If color.IsEmpty Then
Return String.Empty
Else
If color.IsKnownColor Then
Return color.Name
Else
Return SetToHexRgbString(color)
End If
End If
End Function
Friend Function SetToNamedOrHexArgbString(color As Color) As String
If color.IsEmpty Then
Return String.Empty
Else
If color.IsKnownColor Then
Return color.Name
Else
Return SetToHexArgbString(color)
End If
End If
End Function
#End Region
#Region "Assignation"
Private Function SetColor(newColor As Color?, defaultColor As Color) As Color
If newColor.HasValue Then
Return newColor.Value
Else
Return defaultColor
End If
End Function
#End Region
End Module
End Namespace