none
我用User Control。在里面添加了一个textBox控件,想实现组合键(ctrl+c)的功能。 RRS feed

  • 问题

  • 我用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:31

答案

  • 追加提问:

    非常感谢,这个可以实现了。但是还有个小问题是这个是只要按住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.Objecte As System.EventArgsHandles MyBase.Load

        End Sub

        Private Sub gb2_KeyDown(sender As System.Objecte As System.Windows.Forms.KeyEventArgsHandles MyBase.KeyDown
            If (e.KeyCode <> Keys.ControlKey And e.KeyCode <> Keys.CThen
                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我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2012年1月18日 2:48
    版主
  • 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菜鳥自救會

    2012年1月18日 3:07
  • 請改用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/
    2012年1月18日 3:21

全部回复

  • If  e.KeyCode .ControlKey AndAlso e.KeyCode = Keys.C Then

    => 改成

    If e.Control AndAlso e.KeyCode = Keys.C Then

     


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2012年1月17日 10:03
  • 追加提问:

    非常感谢,这个可以实现了。但是还有个小问题是这个是只要按住ctrl和c就行。按其他键也可以啊。比如我同时按shift+ctrl+c。也会跟进去。

    可以只有ctrl+c这两个键的时候才能进if方法里吗?


    范红亮

    e.KeyCode .ControlKey 和 e.Control的区别是什么?

    我试了下,

                    If e.Control Then
                        MessageBox.Show("e.Control")
                    End If

                    If e.KeyCode = Keys.ControlKey Then
                        MessageBox.Show("Keys.ControlKey")
                    End If

    按ctrl键的时候都能进去啊。难道是用组合键的时候只能用e.Control吗?谢谢

    2012年1月18日 2:42
  • 追加提问:

    非常感谢,这个可以实现了。但是还有个小问题是这个是只要按住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.Objecte As System.EventArgsHandles MyBase.Load

        End Sub

        Private Sub gb2_KeyDown(sender As System.Objecte As System.Windows.Forms.KeyEventArgsHandles MyBase.KeyDown
            If (e.KeyCode <> Keys.ControlKey And e.KeyCode <> Keys.CThen
                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我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2012年1月18日 2:48
    版主
  • 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菜鳥自救會

    2012年1月18日 3:07
  • 請改用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/
    2012年1月18日 3:21
  • 谢谢。用这种方法可以了!非常感谢
    范红亮
    2012年1月18日 3:46
  • 谢谢。网上也搜过用Modifiers的方法。但是一直没有成功。

    用这段代码,试了下,没有问题,完美解决,非常感谢!


    范红亮
    2012年1月18日 3:50
  • 谢谢,用楼下的keyData和Modifiers都可以实现了。非常感谢!
    范红亮
    2012年1月18日 3:52
  • 追加,刚刚看了msdn的链接,原来msdn很强大,以后会多看msdn的,再次感谢!
    范红亮
    2012年1月18日 3:58