Vb.net 向下键和向上键组合(例如Ctrl+;A)向上键起作用,而不是向下键
我试图在我的Vb.net 向下键和向上键组合(例如Ctrl+;A)向上键起作用,而不是向下键,vb.net,richtextbox,keydown,keyup,Vb.net,Richtextbox,Keydown,Keyup,我试图在我的RichTextBox上捕获Ctrl+A和Ctrl+CKeyDown组合 MyKeyDown事件未从组合中获取e.KeyCode'A'或'C'(例如Ctrl+A) 触发KeyDown事件,但仅捕获e.Control键,而不是'A'或'C'等的e.KeyCode 我搜索了这么多,虽然有许多类似的问题,但没有一个解决方案适合我。记事本、Word等应用程序使用MouseDown事件,我不明白为什么不能 我真的希望它能在KeyDown事件中起作用,以使最终用户体验与其他应用程序保持一致。我可
RichTextBox
上捕获Ctrl+A
和Ctrl+C
KeyDown
组合
MyKeyDown
事件未从组合中获取e.KeyCode
'A'或'C'(例如Ctrl+A
)
触发KeyDown
事件,但仅捕获e.Control
键,而不是'A'或'C'等的e.KeyCode
我搜索了这么多,虽然有许多类似的问题,但没有一个解决方案适合我。记事本、Word等应用程序使用MouseDown事件,我不明白为什么不能
我真的希望它能在KeyDown
事件中起作用,以使最终用户体验与其他应用程序保持一致。我可能会在KeyDown
之后将e.KeyCode
添加到KeyPress
事件中,但是有很多这样的帖子告诉人们避免KeyPress
事件
向下键在按下Shift键的情况下工作,而不是按下Control键(Ctrl
)
关键事件工作:
Private Sub rtbMain_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles rtbMain.KeyUp
If e.KeyCode = Keys.A AndAlso (e.Control OrElse e.Shift) Then
'Stop
rtbMain.SelectAll()
ElseIf e.KeyCode = Keys.C AndAlso e.Modifiers = Keys.ControlKey Then
'Stop
rtbMain.SelectedRtf = Clipboard.GetText(TextDataFormat.Rtf)
End If
If (e.KeyCode = Keys.A AndAlso e.Modifiers = Keys.Control) Then
'Stop
rtbMain.SelectAll()
ElseIf (e.KeyCode = Keys.C AndAlso e.Modifiers = Keys.Control) Then
'Stop
rtbMain.SelectedRtf = Clipboard.GetText(TextDataFormat.Rtf)
End If
End Sub
KeyDown事件不会:
Private Sub rtbMain_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles rtbMain.KeyDown
If e.KeyCode = Keys.A AndAlso (e.Control OrElse e.Shift) Then
'Stop
rtbMain.SelectAll()
ElseIf e.KeyCode = Keys.C AndAlso e.Modifiers = Keys.ControlKey Then
'Stop
rtbMain.SelectedRtf = Clipboard.GetText(TextDataFormat.Rtf)
End If
If (e.KeyCode = Keys.A AndAlso e.Modifiers = Keys.Control) Then
'Stop
rtbMain.SelectAll()
ElseIf (e.KeyCode = Keys.C AndAlso e.Modifiers = Keys.Control) Then
'Stop
rtbMain.SelectedRtf = Clipboard.GetText(TextDataFormat.Rtf)
End If
End Sub
这是如何出错的并不那么明显。但是代码确实有一个错误。Ctrl+A和Ctrl+C是RTB本身实现的按键。如果您要自己拦截它们,那么必须将e.Handled=True设置为阻止RTB执行它所做的操作。这就是为什么事故并不明显,RTB已经在您自己的代码中完成了您所做的工作,所以应该很难看到它出错。好的,设置e.Handled=True以确保。@HansPassant谢谢。。。我认为RTB只在Multiline设置为False时实现Ctrl+A和Ctrl+C。我应该在哪里设置e.Handled=True?TextBox有这个问题,而不是RichTextBox。在If语句中。请不要使用此代码进行尝试,您不需要它。谢谢。。问题是,它没有进入If语句,甚至没有设置e.Handled=trues。这个控件还有一些不可靠的地方,这也是您认为首先添加事件会有用的可能原因。很难猜测这可能是什么,也许这些击键在到达控件之前就被窗体截获了。