簡體   English   中英

如何通過鼠標單擊啟用禁用的文本框vb.net

[英]How to enable a disabled textbox from mouse click vb.net

簡單如何啟用通過單擊禁用的文本框? 這是怎么做的?

我的代碼不起作用

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狀態時,無法用鼠標單擊它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM