Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 向下键和向上键组合(例如Ctrl+;A)向上键起作用,而不是向下键_Vb.net_Richtextbox_Keydown_Keyup - Fatal编程技术网

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
组合

My
KeyDown
事件未从组合中获取
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。这个控件还有一些不可靠的地方,这也是您认为首先添加事件会有用的可能原因。很难猜测这可能是什么,也许这些击键在到达控件之前就被窗体截获了。