Cómo habilitar un cuadro de texto deshabilitado con el clic del mouse vb.net
textbox disabled-control (4)
Cuando su cuadro de texto está enabled = false
, no puede hacer clic en él con el mouse.
¿Simple cómo habilitar un cuadro de texto que está desactivado haciendo clic en él? ¿Cómo se hace esto?
mi código no funciona
Private Sub Textbox1_MouseClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Textbox1.MouseClick
Textbox1.Enabled = True
End Sub
Puede alguien ayudarme.
¿Tengo que recurrir al seguimiento de los clics del mouse y las posiciones X, Y del cuadro de texto con temporizadores, etc. no se disparan los eventos al hacer clic en él?
Lo que funcionó para mí parece ser que la mejor manera de hacerlo es hacer algo como esto.
Private Sub TextBox1_MouseClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.MouseClick
TextBox1.BackColor = Color.Empty
End Sub
y para deshabilitarlo ejecuta este tipo de código
''To lose focus from textbox otherwise it will have a blinker
Label1.Focus()
TextBox1.BackColor = TextBox.DefaultBackColor
Pero primero configuré el color como desactivado. Descubrí que usar el color ButtonFace probablemente funciona mejor, parece seguro.
TextBox1.BackColor = SystemColors.ButtonFace
mi intención nunca fue deshabilitarla, sino hacer que el usuario piense que está inhabilitada hasta que haga clic en ella ... cuando hace clic en otra parte, se desactiva
Puedes usar IMessageFilter para atrapar mensajes WM_LBUTTONDOWN y luego verificar si el cursor está dentro del TextBox ... algo así como:
Public Class Form1
Private WithEvents filter As New MyFilter
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
TextBox1.Enabled = False
Application.AddMessageFilter(filter)
End Sub
Private Sub filter_LeftClick() Handles filter.LeftClick
Dim rc As Rectangle = TextBox1.RectangleToScreen(TextBox1.ClientRectangle)
If rc.Contains(Cursor.Position) AndAlso Not TextBox1.Enabled Then
TextBox1.Enabled = True
TextBox1.Focus()
End If
End Sub
Private Class MyFilter
Implements IMessageFilter
Public Event LeftClick()
Private Const WM_LBUTTONDOWN As Integer = &H201
Public Function PreFilterMessage(ByRef m As System.Windows.Forms.Message) As Boolean Implements System.Windows.Forms.IMessageFilter.PreFilterMessage
Select Case m.Msg
Case WM_LBUTTONDOWN
RaiseEvent LeftClick()
End Select
Return False
End Function
End Class
End Class
Como alternativa, puede establecer la propiedad de control ReadOnly en True y la propiedad Text en "" cuando un evento MouseClick llegue a otro control (otro TextBox, por ejemplo).
Eso funciona bien para mí. Mi código es:
Private Sub TxtNameIn_Click(sender As Object, e As EventArgs) Handles TxtNameIn.MouseClick
Me.TxtNameIn.ReadOnly = False
Me.TxtPatternIn.ReadOnly = True
Me.TxtPatternIn.Text = ""
End Sub
Private Sub TxtPatternIn_Click(sender As Object, e As EventArgs) Handles TxtPatternIn.MouseClick
Me.TxtPatternIn.ReadOnly = False
Me.TxtNameIn.ReadOnly = True
Me.TxtNameIn.Text = ""
End Sub