• ベストアンサー

【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」キーを押しても無反応でした。 方法を教えていただければ幸いです。

noname#132160
noname#132160

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

  • ベストアンサー
  • basket11
  • ベストアンサー率83% (5/6)
回答No.3

No.2です。 >とにかく「れ(;,+)」のキーが押された時、離された時、を指定できれば良いのですが、このような指定をすることはやはり無理なのでしょうか… ボタン操作をラベルへ表示する為、FormにLabelを2つ配置して下さい。 以下のプログラムをコピー&ペーストして下さい。 ↓↓↓↓↓↓↓↓↓↓ 'ボタンが押された瞬間のイベントをラベルへ表示する Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case 13 Me.Label1.Caption = "Form_KeyDown" & "[Enter]が押されたときの処理" Case 187 Me.Label1.Caption = "Form_KeyDown" & "[れ]が押されたときの処理" Case 192 Me.Label1.Caption = "Form_KeyDown" & "[@]が押されたときの処理" Case Else Me.Label1.Caption = "Form_KeyDown" & " Case " & KeyCode & " を追加する。" End Select End Sub 'ボタンが離れた瞬間のイベントをラベルへ表示する Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case 13 Me.Label2.Caption = "Form_KeyUp" & "[Enter]が押されたときの処理" Case 187 Me.Label2.Caption = "Form_KeyUp" & "[れ]が押されたときの処理" Case 192 Me.Label2.Caption = "Form_KeyUp" & "[@]が押されたときの処理" Case Else Me.Label2.Caption = "Form_KeyUp" & " Case " & KeyCode & " を追加する。" End Select End Sub ↑↑↑↑↑↑↑↑↑↑ ※「KeyPress」は、ボタンを長押ししている間に発生するイベントです。 elseで表示されるKeyCodeをcaseで追加すればボタンを押した時/離した時のイベント処理が可能だと思います。 但し、「Shift+れ=+」等の組合せが必要な操作は、KeyPressを使用しないと処理が困難だと思います。

noname#132160
質問者

お礼

ご丁寧にありがとうございます。 おかげ様で、少々予定とは異なりましたがプログラムを完成させることが出来ました。 感謝しています(^-^)

その他の回答 (2)

  • basket11
  • ベストアンサー率83% (5/6)
回答No.2

WindowsXP VB6.0 です。 「KeyDown」「KeyUp」では、[Shift + れ(;) = +]の様なイベントは取得出来ないと思いますので、「KeyPress」をご使用されてはいかがでしょうか? 【ご参考】 Private Sub Form_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case vbKey1 MsgBox "[1]が押されたときの処理" Case vbKey2 MsgBox "[2]が押されたときの処理" Case vbKeyA MsgBox "[Shift + A]が押されたときの処理" Case 43 MsgBox "[Shift + れ(;) = +]が押されたときの処理" Case 59 MsgBox "[れ(;)]が押されたときの処理" Case 64 MsgBox "[@]が押されたときの処理" Case 97 MsgBox "[a]が押されたときの処理" Case Else MsgBox "Case " & KeyAscii & " を追加する。" End Select End Sub 見当違いかもしれませんが、ご参考になれば幸いです。

noname#132160
質問者

お礼

ご回答ありがとうございます。 KeyPressという物があるのですね。 しかし、私が作ろうと思っているプログラムは、例えば「れ」「+」「;」を区別する必要がありません。 とにかく「れ(;,+)」のキーが押された時、離された時、を指定できれば良いのですが、このような指定をすることはやはり無理なのでしょうか… 「KeyPress」は、数字で指定できるのがとても便利そうですが、キーを押した時の処理と離した時の処理を区別出来ないところが欠点ですね。 質問者の分際で偉そうな事を書いてしまいましたが、ご回答ありがとうございました! どうにかしてKeyPressを使えないか、いろいろ試してみます。

回答No.1

こんばんわ、Enterなら e.KeyCode = keys.enter で判断できるはずですが。 formモジュールでKeyDownイベント についてよく理解できませんが。 ひらがなは別にして MsgBox(e.KeyCode) で値が戻るはずなので http://hp.vector.co.jp/authors/VA014436/prg_memo/prg_all/prg/002.html で返却値からキーステータスを 判断してみては如何でしょうか。

noname#132160
質問者

お礼

ご回答ありがとうございます。 実は、私は今年5月からVisual Basicを始めたばかりの超初心者です。 これを先に書いておくべきでした。 さっそく、教えていただいたMsgBox(e.KeyCode)を試してみます。 参考URLも貼っていただき、本当にありがとうございました。

関連するQ&A

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

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

  • KeyDownイベントで数字以外は発生しません。なぜでしょうか。

    KeyDownイベントで数字以外は発生しません。なぜでしょうか。 電卓を作っているのですが、キーボードからの対応をしているさなか大きな壁に当たりました。 フォームのKeyDownイベントでキーボードからの入力をキャッチする。 数字や演算、エンターキー。 フォームには、電卓を作るのに必要なボタンなどの配置はしてあります。 数字を表示する部分はLabel1にしています。 試験的に下記のソースで実験したところ、テンキーの数字以外、例えば演算キーをキーボードから入力すると、下記のソース通りならば、○算と表示されるはずです。しかし、なぜか数字と表示されます。 つまり、演算キーを押したにも関わらず、数字が入力されたとして処理されたということです。 なぜでしょうか。 そして、試験的にそれぞれが入力成功した時はLabelに表示されるようにしました。 Private Sub Form6_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown //↓エンターキーが押されたとき If e.KeyCode = Keys.Enter Then Label1.Text = "Enter" //↓演算キー及び点が入力されたとき ElseIf &H6A <= e.KeyCode <= &H6F Then Select Case e.KeyCode Case &H6A Label1.Text = "乗算" Case &H6B Label1.Text = "加算" Case &H6D Label1.Text = "減算" Case &H6E Label1.Text = "小数点" Case &H6F Label1.Text = "除算" End Select End If //↓delキーが押されたときの場合 If e.KeyCode = Keys.Delete Then Label1.Text = "Del" End If // ↓は数字1から9までが対象に入ります。 If &H60 <= e.KeyCode <= &H69 Then   Label1.Text = "数字" End If End Sub keycode表はマイクロソフトのキーコード定数を見て作りました。 僕がお伺いしたいのは、これらすべてを正常に対応させたいわけです。 数字、演算キー、その他のキーボード入力が正常にできるようにしたいのですが、どうもうまくできません。 なせかずべて数字ほうに行ってしまいます。これでは話にならないので、対処法はありませんか? 環境は Win7 Ultimate 64bit Visual Studio 2010 (VB) です。 何卒、よろしくお願い申し上げます。

  • VB6.0 KeyDownイベントの対応

    VB6.0を使ってプログラム中ですが、下記の  Command10_KeyDown で、複合キー「 Ctrl + ↓」 だとイベント KeyDown を受信できるのですが、単純な キー「↓」だと、イベント KeyDown を受信でず、他のボタンにフォーカスが移ってしまいます。 Comman10_GotFocus に何か対応策を入れて、単純な キー「↓」のイベント KeyDown を受信する方法はないでしょうか? Private Sub Command10_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 40 Then execsub001() End If End Sub Private Sub Commnad10_Click() execsub001() End Sub Private Sub Comman10_GotFocus() 上記問題への対応策を此処に記述したい End If Private Sub execsub110() 内容は省略 End Sub

  • 初歩的な質問ですみません。

    初歩的な質問ですみません。 テキストボックスのフォーカスを移す処理なんですけど、 Private sub Textbox1_Keydown以下略 if e.Keycode = Keys.Enter then Textbox2.Focus End sub これだとポンと音が鳴ってしまうのですが、 音が鳴らないようにするには、どうしたらいいのでしょうか? よろしくお願いします。

  • エクセルBVAのフォーム式のKeyCode~の意味がわかりません

    エクセルBVAです Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyDown Then KeyCode = 0 End If End Sub ヘルプをみると キーを押したとき、およびキーを離したときに続いて発生します。KeyDown イベントはキーを押すと発生し、KeyUp イベントはキーを離すと発生します。 キーってenterのことですかね? なら、 If KeyCode = vbKeyDown Then KeyCode = 0 End If で、KeyCodeを0ににするってどういうことでしょうか?

  • VB2008でPictureBoxをキーボードを使って動かしたい

    VBを始めたばかりの初心者です。 VB2008を使ってPictureBoxに取り込んだイラストをキーボードを使って自由に動かしたいと思っています。 今作ったものの問題点 1.現状、全く同時に→と↑のキーを押せば右上に動きます。  また、→キーを押してイラストが右に動いているときに、↑キーを押すと上に動きます。  これを右上に動くようにする方法が知りたいのです。 2.キーを押し続けてイラストを動かし続けようとすると、一回動いて止まってから動き続けるという風になってしまいます。  これを止まらずに動くようにしたいのです。 ちなみにこれ↓が今のソースコードです。 Public Class Form1 Private Sub form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Up Then PictureBox1.Top = PictureBox1.Top - 10 End If End Sub Private Sub form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Down Then PictureBox1.Top = PictureBox1.Top + 10 End If End Sub Private Sub form1_KeyLeft(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Left Then PictureBox1.Left = PictureBox1.Left - 10 End If End Sub Private Sub form1_KeyRight(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Right Then PictureBox1.Left = PictureBox1.Left + 10 End If End Sub End Class これ↑を実行する場合は、デザインにPictureBoxを表示してください。PictureBoxに入れるイラストは適当なものを入れてください。 よろしくお願いします。

  • KeyUpイベントにて

    テキストボックスのKeyUpイベントにて『Enter』または『Tab』が押されたら処理をさせようと Private Sub Text_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Text.KeyUp If e.KeyCode = Keys.Enter or e.KeyCode = Keys.Tab Then   処理コード End If End Sub としたのですが『Enter』のときしか処理コードが反映されません ご教授お願いします

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

    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

  • イベント内で別イベントを呼ぶ方法

    早速質問させていただきます。 Form上にDataGridView(dgv)があります。 dgvのセルをマウスでダブルクリックした時に処理を入れております。 Private Sub dgv_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.CellDoubleClick   If e.RowIndex = -1 Then     Exit Sub   End If   '//処理 End Sub このdgv上でEnterキーを押した際に、ダブルクリックしたのと同じ処理を 行いたいのですが、このような場合、どのような実装をするのが一般的なのでしょうか? 例えば、下記の様にCall dgv_CellDoubleClick(sender, e)をするとEventArgsが合わないためエラーになってしまいます。 適切な方法をご教授お願い致します。 Private Sub dgv_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles dgv.KeyDown   If e.KeyCode = Keys.Enter Then     Call dgv_CellDoubleClick(sender, e)   End If End Sub

  • C#のKeyDownイベント?で

    プログラムやり始めたばかりの初心者です。 電卓を作ってみようとやっているのですが、 一応ボタンを押しては動くようになりました。 キーボードからも入力できるようにKeyDownで設定したのですが 数字キー、+ - * /などは反応するのですがEnterキーだけは フォーカスされてるボタンがクリックされた状態になってしまいます。 どのようにすればよいのでしょうか? プログラムはこんな感じです! private void Form1_KeyDown(object sender, KeyEventArgs e) { switch (e.KeyCode) { case Keys.D1: case Keys.NumPad1: this.button_1.Focus(); this.button_1.PerformClick(); break; case Keys.D2: case Keys.NumPad2: this.button_2.Focus(); this.button_2.PerformClick(); break; . . . case Keys.Enter: this.button_kei.Focus(); this.button_kei.PerformClick(); break; }

専門家に質問してみよう