• ベストアンサー

C#で、Shift+Ctrl+Cを認識できない

Windows10 VS2010 C# keydownイベントで、ctrl + Shift + C を取ろうとすると e.Shift、e.Controlがtrue、e.KeyCodeがKeys.ShiftKeyになってしまい ”C”を 判別できなかった。なにか認識できる方法ありませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • iijijii
  • ベストアンサー率55% (504/915)
回答No.3

>なぜかCTRL+SHIFT+Cだけがダメなんです。 まさかとは思いますが、キーボード自体がその組み合わせに対応してない可能性があります。 ↓のサイトで確認してみて下さい。 http://nas6.net/keyboard.htm また左右逆のShiftとCtrlなら使えるかも確認して見て下さい。 もしキーボードのせいならキーボードの設計ミスですね。

k-03matsuura
質問者

補足

他のPCで確認しても同じ現象でした。 右側のCTRL、SHIFT使ってみましたがやはりだめでした。 サイトで確認したところ、なぜか正常に認識できました。 さっぱりわかりません。

その他の回答 (2)

  • dell_OK
  • ベストアンサー率13% (740/5645)
回答No.2

試してみたところ、 Cを先に押して、ShiftとControlを後から押すとこうなり、 ---- True,True,ShiftKey ShiftKey, Shift, Control ---- ShiftやControlを先に押して、Cを後から押すとこうなりました。 ---- True,True,C C, Shift, Control ---- 押す順で違うのかも知れないですね。

k-03matsuura
質問者

補足

なぜかCTRL+SHIFT+Cだけがダメなんです。 もう1日くらい待って解決しないようなら、仕方がないので仕様変えてもらいます。

  • iijijii
  • ベストアンサー率55% (504/915)
回答No.1

Visual Studio 2010 を使っていて 開発対象が書いてないなら Windowsフォーム(System.Windows.Forms) かな? [Ctrl]+[Shift]+[c]を同時に押したつもりでも正確に同時押しすることは不可能です。 [Ctrl]+[Shift]を押した時点で一度イベントが発生したのでしょう。 対策としては、 if (e.KeyData == (Keys.C | Keys.Shift | Keys.Control)) { ~処理~ } ※Keys.ShiftKeyのイベントは無視 で良いと思います。 後で[Ctrl]+[Shift]+[c]同時押しのイベントが発生すると思われます。 余談ですが、Windowsフォーム はこれから覚えても使い道があんまりないかもしれません。 Visual Studio も新しい方が断然と使いやすくなってます。

k-03matsuura
質問者

補足

System.Windows.Formsです。 System.Diagnostics.Debug.WriteLine("{0},{1},{2}", e.Shift, e.Control, e.KeyCode); System.Diagnostics.Debug.WriteLine("{0}", e.KeyData); を入れて確認すると True,True,ShiftKey ShiftKey, Shift, Control が連続で出力されます。やはりCは認識できません。

関連するQ&A

  • Ctrl+vのイベントを解除

    VB2010で、データグリッドビューのグリッドにペーストさせたくありません。 Ctrl+vのイベントを解除させる方法はないでしょうか? ご存知の方おしえてください。よろしくお願いします。 Private Sub DataGridView1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown If e.Control And e.KeyCode = Keys.V Then      'ココにイベント解除を入れたいです End If End Sub

  • CTRL + Xを無効にしたい

     『目的』 グリッドの中に書いた文字列の切り取りを禁止にしたいので CTRL + Xの無効化を実現させようと思っています。  『内容』  KEYDOWNイベントの中に以下のコードを書きました。 If e.KeyData = Keys.Control + Keys.X Then e.Handled = True End If  確かにHandledはTRUEになるのですが、 それでも切り取りが実行されてしまいます。 FlexGridを使っているのですが、 これと何か関係があるのでしょうか?

  • Ctrl + Cなど複数の入力キーの感知

    TextBoxでコピーや貼り付け機能などをつけようと思い。 以下のように書きましたが、うまくいきません。 さらに以下の書き方だと例えば、Shift + Zを押した時に Zの文字がテキストボックスに書き込まれてしまいます。 一般的にはどうやって複数のキー入力を感知するのが王道なんでしょうか? VBを勉強し始めたばかりで、わかりにくい説明で申し訳ないです。 Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown   'ctrl + Zで切り取り   If e.KeyCode = Keys.Z Then    If e.Control Then     MsgBox("aa")     TextBox1.Cut()    End If   End If End Sub

  • C#でマウスホイール + Ctrlキーを使った機能

    C#でアプリケーションを作っています。 マウスホイール + Ctrlキーを使った機能を作りたいと思っています。 マウスホイールは、 private void GraphBrowser_MouseWheel(object sender, MouseEventArgs e) { if ((e.Delta / 120) > 0)//上向きに回転される { } } といった感じです。 Ctrlキーは、 private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == e.Control) { } } といった感じです。 各々、別々の単独の処理は、分かるのですが、 マウスホイール + Ctrlキーとなると分からなくなりました。 指導よろしくお願いいたします。

  • C#でKeyDownイベントが発生しない。

    VS2010 CS.NET 環境です。 Formにボタンが2個あり。ボタン1はF1キー、ボタン2はF2キーで動作するようにしています。 private void Form1_KeyDown(object sender, KeyEventArgs e) {    switch (e.KeyCode)    { case Keys.F1: this.btn1.PerformClick(); break; case Keys.F2: this.btn2.PerformClick(); break; } } ボタン1は計算処理をします。 ボタン2は別のForm2を開きます。 ボタン1はF1キーで何度でも動作しますが、ボタン2はF2キーでForm2を開いて、それを閉じて元のForm1に戻ると次のF2キーではKeyDownイベントが発生しません。 この時はF1キーもKeyDownイベントが発生しなくなります。 Form1のどこかをクリックすると、KeyDownイベントが発生するようになります。 別Formを開いて戻ってもKeyDownイベントを発生させるにはどうしたらいいでしょうか? よろしくお願いします。

  • F2+Ctrl押下時のイベント記述方法

    VB6を使用しています。 F2+Ctrlを同時に押下した場合の処理の記述がうまくいきません。 Form_KeyDownイベントで下記のように記述しようと考えたのですが、KeyCodeに17が入ってしまいうまくいきません。 アドバイスをお願いします。 ----------------------- select case KeyCode  case vbKeyF2   If Shift = 2 Then   'Ctrl+F2押下時   ***処理   End If ※他のファンクションボタンの処理もあるのでcase文にしています。

  • VBA ユーザーフォームの Keypreview について

    いつもお世話になっています。 VBAのユーザーフォーム上で、KeyDown イベントを使いたいのですが、下のコードが動きませんでした。 Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If e.KeyCode = Keys.z Then MsgBox "効いてるよ!" End If End Sub エラー表示も出ません。 ウェブで調べたところ、VBでは「KeyPreview」プロパティーを「true」にすれば解決するという記事をあちこちで見かけましたが、VBA(Excel2003)のユーザーフォームプロパティには、そのような項目が見当たりません。コード上で無理やり設定してみるとエラーになります。 どのようにすれば解決するでしょうか? お知恵をお貸し下さい。

  • データグリッドビュー数字と小数点は入力可能

    VB2010にて、データグリッドビューを編集不可にしています。 数字と小数点は入力可能にしたいのですが、 下記のコードを実行すると、 1キーを押すと49と表示されます。 どうしたら、キー値を表示できるようになるのでしょうか? ご存知の方教えてください。よろしくお願いします。 Private Sub DataGridView1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown '数字と小数点は入力可能 If e.KeyCode >= Keys.D0 And e.KeyCode <= Keys.D9 Or e.KeyCode >= Keys.NumPad0 And e.KeyCode <= Keys.NumPad9 Or e.KeyCode = Keys.Decimal Or e.KeyCode = 190 Then e.Handled = True strTemp = Me.DataGridView1(Me.DataGridView1.SelectedCells(0).ColumnIndex, Me.DataGridView1.SelectedCells(0).RowIndex).Value strTemp = strTemp & e.KeyValue Me.DataGridView1(Me.DataGridView1.SelectedCells(0).ColumnIndex, Me.DataGridView1.SelectedCells(0).RowIndex).Value = strTemp End If 'バックスペース機能追加 If e.KeyCode >= Keys.Back Then e.Handled = True strTemp = Me.DataGridView1(Me.DataGridView1.SelectedCells(0).ColumnIndex, Me.DataGridView1.SelectedCells(0).RowIndex).Value If strTemp = "" Then Exit Sub strTemp = Microsoft.VisualBasic.Left(strTemp, Len(strTemp) - 1) Me.DataGridView1(Me.DataGridView1.SelectedCells(0).ColumnIndex, Me.DataGridView1.SelectedCells(0).RowIndex).Value = strTemp End If If e.Control And e.KeyCode = Keys.V Then 'Ctrl+V押下時は貼付 DGV.Paste(DataGridView1) ElseIf e.KeyCode = Keys.Delete Then 'Delete押下時は削除 DGV.Delete(DataGridView1) End If End Sub

  • 【KeyDown】キーコードについて

    Visual Basic について質問です。 「KeyDown」「KeyUp」で、「キーを押した時、離した時に…」というプログラムが書けますよね。   Private Sub Form1_KeyDown(…省略) Handles Me.KeyDown     If e.KeyCode = Keys.A Then        …(1)     ElseIf e.KeyCode = Keys.B Then        …(2)     ElseIf e.KeyCode = Keys.D0 Then        …(3)     End If   End Sub こんな感じで、 「A」キーが押されたら処理(1)を実行 「B」キーが押されたら処理(2)を実行 「0」キーが押されたら処理(3)を実行 という風なプログラムを作っているのですが、 右の方にある「@」キーや、 カギカッコのキーや、 ひらがなの「れ」「け」「む」「ね」「る」「め」「ろ」のキーや、 ENTERキーの指定方法が分かりません。 このキーが使えないと、プログラムとして成り立たなくなってしまうので、非常に困っています。 ↓このページに、いろいろなキーの指定方法が書かれていましたが、   ttp://msdn2.microsoft.com/ja-jp/library/system.windows.forms.keys(VS.80).aspx どれがどのキーなのか分かりませんでした。 適当にそれらしい物でやってみましたが、どのキーを押しても反応無しでした。 「Enter」キーは、「Enter」で指定するように書かれていましたが、「Enter」キーを押しても無反応でした。 方法を教えていただければ幸いです。

  • VB2008KeyDownの使い方が分かりまんせん

    VB2008 KeyDownの使い方も含め良く分かりません If e.KeyCode = Keys.Down Then e.KeyCode = 40 End If で実行すると、 「エラー 1 プロパティ 'KeyCode' は 'ReadOnly' です。」 とエラーが出ます。 何故エラーが出るのでしょうか?

専門家に質問してみよう