- ベストアンサー
C#で、Shift+Ctrl+Cを認識できない
Windows10 VS2010 C# keydownイベントで、ctrl + Shift + C を取ろうとすると e.Shift、e.Controlがtrue、e.KeyCodeがKeys.ShiftKeyになってしまい ”C”を 判別できなかった。なにか認識できる方法ありませんか?
- k-03matsuura
- お礼率0% (0/5)
- C・C++・C#
- 回答数3
- ありがとう数3
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>なぜかCTRL+SHIFT+Cだけがダメなんです。 まさかとは思いますが、キーボード自体がその組み合わせに対応してない可能性があります。 ↓のサイトで確認してみて下さい。 http://nas6.net/keyboard.htm また左右逆のShiftとCtrlなら使えるかも確認して見て下さい。 もしキーボードのせいならキーボードの設計ミスですね。
その他の回答 (2)
- dell_OK
- ベストアンサー率13% (740/5645)
試してみたところ、 Cを先に押して、ShiftとControlを後から押すとこうなり、 ---- True,True,ShiftKey ShiftKey, Shift, Control ---- ShiftやControlを先に押して、Cを後から押すとこうなりました。 ---- True,True,C C, Shift, Control ---- 押す順で違うのかも知れないですね。
補足
なぜかCTRL+SHIFT+Cだけがダメなんです。 もう1日くらい待って解決しないようなら、仕方がないので仕様変えてもらいます。
- iijijii
- ベストアンサー率55% (504/915)
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 も新しい方が断然と使いやすくなってます。
補足
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
- ベストアンサー
- Visual Basic
- CTRL + Xを無効にしたい
『目的』 グリッドの中に書いた文字列の切り取りを禁止にしたいので CTRL + Xの無効化を実現させようと思っています。 『内容』 KEYDOWNイベントの中に以下のコードを書きました。 If e.KeyData = Keys.Control + Keys.X Then e.Handled = True End If 確かにHandledはTRUEになるのですが、 それでも切り取りが実行されてしまいます。 FlexGridを使っているのですが、 これと何か関係があるのでしょうか?
- ベストアンサー
- Visual Basic
- 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
- ベストアンサー
- Visual Basic
- 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・C++・C#
- 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文にしています。
- ベストアンサー
- Visual Basic
- 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)のユーザーフォームプロパティには、そのような項目が見当たりません。コード上で無理やり設定してみるとエラーになります。 どのようにすれば解決するでしょうか? お知恵をお貸し下さい。
- ベストアンサー
- Visual Basic
- データグリッドビュー数字と小数点は入力可能
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
- ベストアンサー
- Visual Basic
- 【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」キーを押しても無反応でした。 方法を教えていただければ幸いです。
- ベストアンサー
- Visual Basic
- VB2008KeyDownの使い方が分かりまんせん
VB2008 KeyDownの使い方も含め良く分かりません If e.KeyCode = Keys.Down Then e.KeyCode = 40 End If で実行すると、 「エラー 1 プロパティ 'KeyCode' は 'ReadOnly' です。」 とエラーが出ます。 何故エラーが出るのでしょうか?
- 締切済み
- Visual Basic
補足
他のPCで確認しても同じ現象でした。 右側のCTRL、SHIFT使ってみましたがやはりだめでした。 サイトで確認したところ、なぜか正常に認識できました。 さっぱりわかりません。