DOBON.NET DOBON.NETプログラミング掲示板過去ログ

.NETでのKeyイベント

分類:[.NET]

画像が表示されている時にAのKeyを押すとTextBoxの数字に+1されるという風にするにはどのようなプログラムをすればいいですか?
If PictureBox1.Visible = True Then
e.keycode=keys.A= TextBox+1
End If
であっていますか?
■No514に返信(貴台さんの記事)
> 画像が表示されている時にAのKeyを押すとTextBoxの数字に+1されるという風にするにはどのようなプログラムをすればいいですか?
> If PictureBox1.Visible = True Then
> e.keycode=keys.A= TextBox+1
> End If
> であっていますか?

まず、「画像が表示されている時」というのは非常にあいまいなため、なんともいえません。(前にも同じような質問があったと思いますが。)

「AのKeyを押すとTextBoxの数字に+1されるという」の部分ですが、TextBoxにフォーカスがあるときでしょうか?もしそうだとして、KeyPressイベントハンドラで処理するとなると、例えば次のようになります。

Private Sub TextBox1_KeyPress(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles TextBox1.KeyPress
If e.KeyChar = "a"c Or e.KeyChar = "A"c Then
TextBox1.Text = (Integer.Parse(TextBox1.Text) + 1).ToString()
e.Handled = True
End If
End Sub
質問の内容が曖昧だったため不快な思いをさせたかもしれません。すいませんでした。
改めて質問させていただきます。
ピクチャーボックス1をランダムに表示させるとします。
そして、ピクチャーボックス1が表示された時にForm上でAのKeyを押すとTextBoxの数字に+1させるというふうにするにはどういうプログラムを打てばいいのでしょうか?
Private Sub Form1_Keypress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Form1.Keypress
If PictureBox1.Visible = True Then
e.keycode=keys.A= TextBox1.Text + 1
End If

End Sub
であっていますか?今手元にVBの入ったパソコンがないので明日上のコードで試して見ますが、違うところがあったりすればお教えください。
■No527に返信(貴台さんの記事)
> e.keycode=keys.A= TextBox1.Text + 1

このコードは文法レベルで意味不明なコードです。
No524で管理人さんが提示されたコードをよく読みましょう。
管理人さんが書いてくださったコードを読んでみたのですが、読めなかったので文献を何冊か読んでみてコードに書いてある(Integer.Parse(TextBox1.Text) + 1).ToString()などを調べてみたのですが、例外処理のところに書いてあったり、e.Handled の意味がよくわからなかったので管理人さんの書いてくださったコードの意味を教えて下さいませんか?
■No535に返信(貴台さんの記事)
> 管理人さんが書いてくださったコードを読んでみたのですが、読めなかったので文献を何冊か読んでみてコードに書いてある(Integer.Parse(TextBox1.Text) + 1).ToString()などを調べてみたのですが、例外処理のところに書いてあったり、e.Handled の意味がよくわからなかったので管理人さんの書いてくださったコードの意味を教えて下さいませんか?

本を読むよりヘルプで調べた方がいいと思います。e.HandledもKeypressイベントを調べれば書いてあるはずです。

また、「Form上でAのKeyを押すと...」ということなので、

KeyPressなどのキーイベントをすべてフォームが受け取るようにする
http://dobon.net/vb/dotnet/form/keypreview.html

も参考になるかもしれません。
ヘルプで調べてみたのですが英語で書いてあったり日本語でもそのことについて書いてなく意味がわからなかったので管理人さんの書いてくださったコードの意味をわかりやすく教えてくださいませんか?
2003/09/03(Wed) 09:59:01 編集(投稿者)

> ヘルプで調べてみたのですが英語で書いてあったり日本語でもそのことについて書いてなく意味がわからなかったので管理人さんの書いてくださったコードの意味をわかりやすく教えてくださいませんか?
少し甘えていませんか?
例えば、TextBox1.Text = (Integer.Parse(TextBox1.Text) + 1).ToString()
一つにとっても、Integer,Parse,ToStringと調べるべき内容があると思いますが…

まぁ、今回は大目に見るとして、
まず、「Integer.Parse」を考えて見ましょう。
このParseは簡単に言うと、Integer型に変換するというメソッドです。
したがって、Boolean型にもDouble型にも同じメソッドがあります。
もう少し解り易く言うと、「CInt」だと思ってもいいです。
ただ、管理人さんは恐らく「C#」も意識して作っていると思われますので、「Integer.Parse」を使っていると思います。「CInt」はVBの関数です。
意味はそれくらいにして、なぜ「Integer.Parse」を使ったのかと言うと、
「(TextBox1.Text) + 1」に注目してください。
あなたは、TextBox1の中身を+1したいのでしょ?
ここで考えて欲しいのは、「TextBox1.Text」はString型だという事です。
しかし、+1する為にはString型をInteger型に変換する必要があるのです。
なぜか…「1」もInteger型なのです。
もう解ったと思いますが、String型とInteger型では計算できません。

次に「(X).ToString()」です。よく考えて欲しいのですが、
上記でXはInteger型に変更されています。しかし、このまま
TextBox1.Text = X
とすると、型が違う為、エラーになります。
そこで、再び型変換を行なうのです。それが、「ToString」です。
>e.Handled の意味がよくわからなかった
管理人さんの作ったサンプル
http://dobon.net/vb/dotnet/form/keypreview.html
に「フォーカスのあるコントロールにキーイベントを渡さないようにしたいときは、eパラメータのHandledプロパティをTrueにします。」
と書いてあったと思いますが…
解らないのであれば、「イベントをキャンセルするんだ!!」と解釈してください。
もう少し、VB.NETに対する基礎知識を身に付けてください。
そもそも、コードの書き方自体、理解していないようなので…
お勧めの本を紹介します。
書籍名:新 VisualBasic.NET 入門 ビギナー編
著者 :林晴比古
発行所:ソフトバンク パブリシング
です。VisualBasic.NETの操作方法も載っていますし、クラスについての解説もありますので、きっと役立つと思いますよ。
  • 題名: Re[9]: .NETでのKeyイベント
  • 著者: クリリン
  • 日時: 2003/09/03 9:54:15
  • ID: 555
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
ちょっと、きつかったかな…反省(-_-)
ただ、貴台さんのレベルアップの手助けができればと思ったのですが…
  • 題名: Re[7]: .NETでのKeyイベント
  • 著者: よねKEN
  • 日時: 2003/09/03 10:07:27
  • ID: 556
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No546に返信(貴台さんの記事)
> ヘルプで調べてみたのですが英語で書いてあったり日本語でも
> そのことについて書いてなく意味がわからなかったので

使用されている環境がわかりませんが、
VS.NET/VB.NET/.NET Framework SDKのいずれを使われているにしても、
日本語版のヘルプは日本語で書かれていますよ。
#初心者の方にとってわかりやすい、とはいいがたいので、
#ヘルプで理解できない場合はやっぱりまず入門書をこなした方がよいと思います。
#最終的にはヘルプを読んで内容を理解できた方がいいです。

で、管理人さんのコードを理解するために読むべきヘルプを上げておきます。
(URLが長いので途中で改行しています)

■Int32.Parseメソッドのヘルプ(VBのIntegerはSystem.Int32構造体の別名なので)

http://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/cpref/html/frlrfsystemint32classparsetopic1.asp

■System.Windows.Forms.KeyPressEventArgsクラス

http://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformskeypresseventargsclasstopic.asp

この中のHandledプロパティ、KeyCharプロパティがe.Handled、e.KeyCharの部分になります。

DOBON.NET | プログラミング道 | プログラミング掲示板