Esta es la nueva versión del Textbox con marca de agua, el proceso de creación es igual que el anterior, esta vez el código es el siguiente:
Public Class TextBoxWaterMark
Private _active As Boolean
Private _defaultFont As Font = Me.Font
Private _defaultColor As Color = Me.ForeColor
Private _defaultBackColor As Color = Me.BackColorPrivate _watermarkText As String
Private _watermarkFont As Font = New Font(_defaultFont, FontStyle.Italic)
Private _watermarkColor As Color = Color.Gray
Private _watermarkBackColor As Color = Color.White
Private _password As BooleanProperty WaterMarkText() As String
Get
Return _watermarkText
End Get
Set(ByVal value As String)
_watermarkText = value
If _active = True Or Me.Text = «» Then
ActiveWaterMark()
End If
End Set
End PropertyProperty WaterMarkColor() As Color
Get
Return _watermarkColor
End Get
Set(ByVal value As Color)
_watermarkColor = value
End Set
End PropertyProperty WaterMarkBackColor() As Color
Get
Return _watermarkBackColor
End Get
Set(ByVal value As Color)
_watermarkBackColor = value
End Set
End PropertyProperty WaterMarkFont() As Font
Get
Return _watermarkFont
End Get
Set(ByVal value As Font)
_watermarkFont = value
End Set
End PropertyPrivate Sub TextBoxWaterMark_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Enter
If _active = True Then
QuitWaterMark()
End If
End SubPrivate Sub TextBoxWaterMark_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LostFocus
If Me.Text = «» Then
ActiveWaterMark()
End If
End SubPublic Overrides Property Text() As String
Get
If _active = True Then
Return «»
Else
Return MyBase.Text
End If
End Get
Set(ByVal value As String)
MyBase.Text = value
End Set
End PropertyPublic Sub ActiveWaterMark()
_active = True
Me.Text = _watermarkText
Me.Font = _watermarkFont
Me.BackColor = _watermarkBackColor
Me.ForeColor = _watermarkColor
End SubPublic Sub QuitWaterMark()
_active = False
Me.Text = «»
Me.Font = _defaultFont
Me.BackColor = _defaultBackColor
Me.ForeColor = _defaultColor
End SubPrivate Sub TextBoxWaterMark_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.TextChanged
If Me.Text = «» And Not Me.Focused Then
ActiveWaterMark()
End If
End Sub
End Class
Se han corregido en esta versión los siguientes errores:
- Si se está mostrando la marca de agua la propiedad Text de vuelve una cadena vacía
- Se pueden cambiar los colores del texto normal
- Si el texto se cambia sin estar en el foco se activa la marca de agua
- En caso de que el usuario escriba el mismo texto de la marca de agua no se active los colores de la marca de agua
Además he añadido las sigiuentes características:
- Se puede cambiar el color de fondo de la marca de agua.
- Se pueden cambiar los colores de la marca de agua
Pronto publicaré la siguiente versión.