.net vb.net textbox disabled-control

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