У меня есть пользовательский элемент управления, который содержит текстовое поле, которое используется для паролей, и кнопку рядом с текстовым полем для снятия маски с пароля.
Ранее я задавал этот вопрос, когда текстовое поле находилось в форме. и код WndPro c работает нормально. Однако в UserControl это, кажется, игнорируется. Остальная часть кода предназначена для связанных событий кнопок.
Почему не выполняется код wndpro c? Я уверен, что что-то упустил, но не знаю, что.
Код выглядит следующим образом:
Friend WithEvents txtPassword As TextBox
Friend WithEvents btnMaskButton As Button
Friend WithEvents ToolTip1 As ToolTip
Const EM_SHOWBALLOONTIP = &H1503
Private Sub txtPassword_KeyDown(sender As Object, e As KeyEventArgs) Handles txtPassword.KeyDown
If (e.Modifiers = Keys.Control) Then
e.Handled = True
End If
End Sub
Private Sub txtPassword_KeyUp(sender As Object, e As KeyEventArgs) Handles txtPassword.KeyUp
Dim PasswordMasked As PwdMaskStatus = DirectCast(txtPassword.Tag, PwdMaskStatus)
Dim CtrlMsg As String = "Password Shortcuts Disabled"
Dim CtrlCmds() As Keys = {Keys.Control Or Keys.C, Keys.Control Or Keys.Insert,
Keys.Control Or Keys.X, Keys.Shift Or Keys.Delete,
Keys.Control Or Keys.V, Keys.Shift Or Keys.Insert,
Keys.Control Or Keys.A}
For Each CtrlKey As Keys In CtrlCmds
If (e.KeyData = CtrlKey) Then
e.Handled = True
ToolTip1.Show(CtrlMsg, Me, New Point(0, Me.Height + 2), 6000)
Exit For
End If
Next
ToolTip1.SetToolTip(txtPassword, "Password")
End Sub
Private Sub txtPassword_SizeChanged(sender As Object, e As EventArgs) Handles txtPassword.SizeChanged
Dim ButtonY As Integer
ButtonY = CInt((txtPassword.Height / 2) - (btnMaskButton.Height / 2) + 0.5)
btnMaskButton.Location = New Point(btnMaskButton.Location.X, ButtonY)
End Sub
Private Sub txtPassword_Validating(sender As Object, e As CancelEventArgs)
If CheckEmpty(txtPassword.Text) Then
Call HidePassword()
e.Cancel = True
Else
e.Cancel = False
End If
End Sub
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If (m.Msg = EM_SHOWBALLOONTIP) Then
m.Result = IntPtr.Zero
Return
End If
MyBase.WndProc(m)
End Sub