2013-07-05 58 views
1

簡單如何啓用通過單擊禁用的文本框?這是如何完成的?如何啓用禁用鼠標單擊文本框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位置等。點擊它時不會觸發任何事件?

+0

當它禁用,你不能點擊它。所以它永遠不會讀取你的代碼。 – logixologist

+1

我有一個想法,我可以改變背景顏色,使其看起來禁用,但從來沒有實際禁用它。 – SSpoke

+0

如何啓用/禁用它旁邊的複選框。這會爲你的UI工作嗎? – logixologist

回答

4

您可以使用IMessageFilter捕獲WM_LBUTTONDOWN消息和然後檢查是否光標在文本框之內......這樣的:

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 
+0

這是完美的再次感謝 – SSpoke

0

當你的文本框在enabled = false狀態,你不能用鼠標點擊它。

1

對我來說什麼工作似乎是最好的辦法就是做這樣的事情。

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 

我的意圖從來沒有禁用它,而是要讓用戶覺得直到他點擊它,它是禁用..他點擊的時候別的地方它變成殘疾

1

作爲替代方案,您可以設置只讀控件屬性爲True和Text屬性爲「」,當鼠標點擊事件到達另一個控制(例如另一個TextBox)。

這對我來說很好。我的代碼是:

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 
相關問題