积极答复者
我用User Control。在里面添加了一个textBox控件,想实现组合键(ctrl+c)的功能。

问题
-
我用User Control。在里面添加了一个textBox控件,想实现组合键(ctrl+c)的功能。
我在keydown事件里面
If e.KeyCode .ControlKey AndAlso e.KeyCode = Keys.C Then
''要进行的操作。把textBox里面的内容放到剪贴板里
Dim timeValue As String = txtTime.Text
System.Windows.Forms.Clipboard.SetText(timeValue)
Dim value As String = System.Windows.Forms.Clipboard.GetText()
MessageBox.Show(value)
End If问题是,根本不会走组合键。只要一按ctrl键,就进keydown事件。请问怎么处理组合键事件呢?请高手指教,谢谢
- 已编辑 范红亮 2012年1月17日 9:33
答案
-
追加提问:
非常感谢,这个可以实现了。但是还有个小问题是这个是只要按住ctrl和c就行。按其他键也可以啊。比如我同时按shift+ctrl+c。也会跟进去。
可以只有ctrl+c这两个键的时候才能进if方法里吗?
范红亮在外边尝试再套用一个判断,没有按下shift的时候……
Public Class gb2
Dim flag As Boolean = False '默认没有检测到按下其它键
Dim index As Integer = 0
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub gb2_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If (e.KeyCode <> Keys.ControlKey And e.KeyCode <> Keys.C) Then
flag = True '已经按下其它键了
End If
If e.Control AndAlso e.KeyCode = Keys.C AndAlso flag = False Then
MessageBox.Show("OK")
End If
End Sub
End Class
QQ我:
下载MSDN桌面工具(Vista,Win7)
我的博客园
慈善点击,点击此处- 已编辑 ThankfulHeartModerator 2012年1月18日 3:06
- 已建议为答案 Mike FengModerator 2012年1月19日 9:46
- 已标记为答案 Mike FengModerator 2012年1月19日 9:47
-
Modifiers
http://msdn.microsoft.com/zh-cn/library/system.windows.forms.keyeventargs.modifiers.aspx
If e.KeyCode = Keys.C AndAlso e.Modifiers.ToString() = "Control" Then MessageBox.Show("Ctrl+C") End If
或
If e.KeyCode = Keys.C AndAlso e.Modifiers = Keys.Control Then MessageBox.Show("Ctrl + C") End If
歡迎參觀我的Blog.NET菜鳥自救會
- 已编辑 小歐ouMVP 2012年1月18日 10:06
- 已标记为答案 Mike FengModerator 2012年1月19日 9:47
-
請改用e.KeyData來檢查!
If e.Control AndAlso e.KeyCode = Keys.C Then
=>
If e.KeyData = (Keys.Control + Keys.C) Then
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/- 已标记为答案 Mike FengModerator 2012年1月19日 9:47
全部回复
-
追加提问:
非常感谢,这个可以实现了。但是还有个小问题是这个是只要按住ctrl和c就行。按其他键也可以啊。比如我同时按shift+ctrl+c。也会跟进去。
可以只有ctrl+c这两个键的时候才能进if方法里吗?
范红亮e.KeyCode .ControlKey 和 e.Control的区别是什么?
我试了下,
If e.Control Then
MessageBox.Show("e.Control")
End IfIf e.KeyCode = Keys.ControlKey Then
MessageBox.Show("Keys.ControlKey")
End If按ctrl键的时候都能进去啊。难道是用组合键的时候只能用e.Control吗?谢谢
- 已编辑 范红亮 2012年1月18日 3:17
-
追加提问:
非常感谢,这个可以实现了。但是还有个小问题是这个是只要按住ctrl和c就行。按其他键也可以啊。比如我同时按shift+ctrl+c。也会跟进去。
可以只有ctrl+c这两个键的时候才能进if方法里吗?
范红亮在外边尝试再套用一个判断,没有按下shift的时候……
Public Class gb2
Dim flag As Boolean = False '默认没有检测到按下其它键
Dim index As Integer = 0
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub gb2_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If (e.KeyCode <> Keys.ControlKey And e.KeyCode <> Keys.C) Then
flag = True '已经按下其它键了
End If
If e.Control AndAlso e.KeyCode = Keys.C AndAlso flag = False Then
MessageBox.Show("OK")
End If
End Sub
End Class
QQ我:
下载MSDN桌面工具(Vista,Win7)
我的博客园
慈善点击,点击此处- 已编辑 ThankfulHeartModerator 2012年1月18日 3:06
- 已建议为答案 Mike FengModerator 2012年1月19日 9:46
- 已标记为答案 Mike FengModerator 2012年1月19日 9:47
-
Modifiers
http://msdn.microsoft.com/zh-cn/library/system.windows.forms.keyeventargs.modifiers.aspx
If e.KeyCode = Keys.C AndAlso e.Modifiers.ToString() = "Control" Then MessageBox.Show("Ctrl+C") End If
或
If e.KeyCode = Keys.C AndAlso e.Modifiers = Keys.Control Then MessageBox.Show("Ctrl + C") End If
歡迎參觀我的Blog.NET菜鳥自救會
- 已编辑 小歐ouMVP 2012年1月18日 10:06
- 已标记为答案 Mike FengModerator 2012年1月19日 9:47
-
請改用e.KeyData來檢查!
If e.Control AndAlso e.KeyCode = Keys.C Then
=>
If e.KeyData = (Keys.Control + Keys.C) Then
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/- 已标记为答案 Mike FengModerator 2012年1月19日 9:47