简单的如何启用通过单击禁用的文本框?这是怎么做的?
我的代码不起作用
Private Sub Textbox1_MouseClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Textbox1.MouseClick
Textbox1.Enabled = True
End Sub
谁能帮我吗。
我是否必须求助于使用计时器等跟踪鼠标点击和文本框的 X、Y 位置。点击它不会触发任何事件?
简单的如何启用通过单击禁用的文本框?这是怎么做的?
我的代码不起作用
Private Sub Textbox1_MouseClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Textbox1.MouseClick
Textbox1.Enabled = True
End Sub
谁能帮我吗。
我是否必须求助于使用计时器等跟踪鼠标点击和文本框的 X、Y 位置。点击它不会触发任何事件?
您可以使用 IMessageFilter 捕获 WM_LBUTTONDOWN 消息,然后检查光标是否在 TextBox 内...类似于:
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
对我有用的似乎最好的方法是做这样的事情。
Private Sub TextBox1_MouseClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.MouseClick
TextBox1.BackColor = Color.Empty
End Sub
并禁用它运行这种代码
'To lose focus from textbox otherwise it will have a blinker
Label1.Focus()
TextBox1.BackColor = TextBox.DefaultBackColor
但首先将颜色设置为禁用,我发现使用 ButtonFace 颜色可能效果最好,它看起来很真实。
TextBox1.BackColor = SystemColors.ButtonFace
我的意图是永远不会禁用它,而是让用户认为它在他点击它之前被禁用..当他点击其他地方时它会被禁用
作为替代方法,当 MouseClick 事件到达另一个控件(例如另一个 TextBox)时,您可以将 ReadOnly 控件属性设置为 True,并将 Text 属性设置为 ""。
这对我来说很好。我的代码是:
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
当您的文本框enabled = false处于您无法用鼠标单击它的状态时。