C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: KeyPressEventでのスペースキーの認証


(過去ログ 77 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■45849 / inTopicNo.1)  KeyPressEventでのスペースキーの認証
  
□投稿者/ C#嫌い (7回)-(2010/01/20(Wed) 22:12:37)

分類:[C#] 

VisualStudio2008 C#で windwsフォームアプリケーションを作っています。
たびたびすみません。

KeyPressEventを用いてタイピングゲームのようなものを作っています。

問題文通りにタイプし、正解していれば問題文の色が変わるようにしています。
問題文が単語のみの場合は何も問題なく動くのですが、
問題文が2語以上で単語の間にスペースがあった場合の動作で困っています。

shiftキーを押しながらスペースキーを押すと問題なくスペースを入力できるのですが、
スペースキー単体でタイプすると、フォーカスのある終了ボタンが反応してアプリケーション自体が終了してしまいます。

終了ボタンをつけなければいい話なのですが、便宜上必要と思いどうしてもはずせません。

スペースキーの入力について何か特別に宣言とかしなければならないのでしょうか。
散々参考書やネットを探したのですが…
どなたかご返答お願いします。
引用返信 編集キー/
■45852 / inTopicNo.2)  Re[1]: KeyPressEventでのスペースキーの認証
□投稿者/ たくボン (324回)-(2010/01/21(Thu) 01:54:44)
No45849 (C#嫌い さん) に返信
> VisualStudio2008 C#で windwsフォームアプリケーションを作っています。
> たびたびすみません。
>
> KeyPressEventを用いてタイピングゲームのようなものを作っています。

まず、このKeyPressイベントをどのコントロール(もしくはフォーム)に書いているかですね(現象からしてフォームのKeyPressイベントで処理しているように見受けられます。)

> スペースキー単体でタイプすると、フォーカスのある終了ボタンが反応してアプリケーション自体が終了してしまいます。
キー入力をフォームで処理していて、文字を表示するコントロールがLabelやPictureBoxのようなフォーカスを持たないコントロールの場合、且つコントロールに配置されているコントロールが前述のコントロールと終了ボタンのみの場合は同じ現象になると思います。

解決方法としては、いくつかあると思います。

案1:フォーカスを持たないLabelやPictureBoxを他のコントロールに変えて、KeyPressのイベントはそのコントロールで処理する。
案2:ボタンにフォーカスを持たせないようにする。
案3:UserControlにLabelもしくはPictureBoxを載せてキー処理をUserControlで処理する。

案1は代替えできそうなコントロールがある場合。

案2はBottonをカスタムコントロールで継承させて、コンストラクタかどこかのタイミングで
Me.SetStyle(ControlStyles.Selectable, False)
でスタイルを変更する。

一番簡単なのは案3のUserControlを使う方法。
引用返信 編集キー/
■45856 / inTopicNo.3)  Re[1]: KeyPressEventでのスペースキーの認証
□投稿者/ .SHO (1148回)-(2010/01/21(Thu) 08:50:47)
No45849 (C#嫌い さん) に返信

直接の回答ではないですが…

> 終了ボタンをつけなければいい話なのですが、便宜上必要と思いどうしてもはずせません。

便宜上必要というのは、プログラムを終了させるために必要ってことでしょうか?
最悪「Alt+F4」でも終了するし、最終的にはメニューをつけた方が良いかと。。
引用返信 編集キー/
■45859 / inTopicNo.4)  Re[2]: KeyPressEventでのスペースキーの認証
□投稿者/ なちゃ (357回)-(2010/01/21(Thu) 09:19:42)
そういう特殊キーを処理するイベントが別途あったような。
カーソルとかエンターとかスペースとかのキー。
ちょっとはっきり覚えてないので間違ってたらすみません。

引用返信 編集キー/
■45867 / inTopicNo.5)  Re[3]: KeyPressEventでのスペースキーの認証
□投稿者/ たくボン (325回)-(2010/01/21(Thu) 11:02:13)
No45859 (なちゃ さん) に返信
> そういう特殊キーを処理するイベントが別途あったような。
> カーソルとかエンターとかスペースとかのキー。
> ちょっとはっきり覚えてないので間違ってたらすみません。

http://www.atmarkit.co.jp/fdotnet/dotnettips/241windlgkey/windlgkey.html

ProcessDialogKeyとかIsInputKeyだったと思うけど、これはテストしてなかったなぁ。
フォームでこれらを処理してもいんだろうけど、コントロールが増えたときにどうするか考えないといけないし、今回の現象が「終了ボタンが起動時にフォーカスを持ってしまう」って言うなら表示コントロールにフォーカスを与えるだけでいいと思う。

スレ主さんが来ないから、どんな感じなのかあくまで推測の上での回答だけど。
引用返信 編集キー/
■45888 / inTopicNo.6)  Re[4]: KeyPressEventでのスペースキーの認証
□投稿者/ C#嫌い (8回)-(2010/01/21(Thu) 15:50:28)
みなさん返信ありがとうございます!
遅くなってしまって申し訳ないです。

>たくボンさん
おっしゃるとおり、フォームでKeyPressイベントを処理しています。
文字を表示するコントロールはリッチテキストボックスを使用しています
特に何も考えずにフォームでキー入力処理を行っていました・・・
が、リッチテキストボックスでKeyPressイベントを処理してみたところ、スペースの入力は正しく行えました。

ただ文字が反転してしまいました。
これは設定やらでどうにかできそうですのでがんばります。

初歩的な質問ばかりしてしまいすみません・・・
ありがとうございました!!


>.SHOさん
その通りです!終了させるために必要と思ってつけたのですが、
メニューをつける、余力があればがんばりたいと思います。
ありがとうございます!


>なちゃさん
今回はイベントの処理を別ですることにより解決できましたが、今後必要になってくるかもしれないことです。
情報ありがとうございます!!


みなさん回答ありがとうございます
もっと勉強します。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -