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

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

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

Re[2]: カンマのKeyData


(過去ログ 54 を表示中)

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

■30709 / inTopicNo.1)  カンマのKeyData
  
□投稿者/ 水虫中 (1回)-(2009/01/04(Sun) 01:21:55)

分類:[.NET 全般] 

2009/01/04(Sun) 02:02:29 編集(投稿者)

C# 学習です

(char)e.KeyData
で入力文字はカンマ,にするとなぜかR四分の三という文字列が入りカンマと一致しません。
カンマが入力されたときの処理を切り分けたいのですがR四分の三と==で結ばれるものは何なんでしょうか。
または別方法で結び付けられるのでしょうか。基本的にはe.KeyDataで処理をしている為それを使いたいです。

あとe.KeyCodeですと188が返ってくるので切り分けは出来ますがe.KeyDataで試したいということがあります、
もう一つご質問ですがなぜカンマで188になるのかがわかりません。アスキーコードでは44が返ってくるはずなんです
こちらも宜しくお願い致します
引用返信 編集キー/
■30714 / inTopicNo.2)  Re[1]: カンマのKeyData
□投稿者/ よねKEN (245回)-(2009/01/04(Sun) 04:03:06)
念のための確認ですが、WebアプリではなくWindowsアプリについての質問ということでよいですね?

No30709 (水虫中 さん) に返信
> (char)e.KeyData
このコードは意味的に正しくありません。

e.KeyCodeはKeys列挙型で、押されたキーのキーコードがセットされます。文字コードではありません。
e.KeyDataもKeys列挙型ですが、こちらは通常のキーだけでなく、修飾キー(Shift、Ctrl、Alt)が押されている場合は、
修飾キーのキーコードも加算された(正確には論理和をとった)値がセットされます。

e.KeyCodeもe.KeyDataも意味的に文字ではありませんので、charにキャストするのは意味がありません。
キーコードの内部値の整数のうち2バイト分をcharにキャストした結果になります。

> で入力文字はカンマ,にするとなぜかR四分の三という文字列が入りカンマと一致しません。

"1/4"を表現した文字ではありませんか?
私のところで試したところそのような結果になりました。
(188は16進数では00BCで、UNICODEの文字コード表で調べた結果とも一致しています)

> カンマが入力されたときの処理を切り分けたいのですがR四分の三と==で結ばれるものは何なんでしょうか。
> または別方法で結び付けられるのでしょうか。基本的にはe.KeyDataで処理をしている為それを使いたいです。

説明にないのですが、何のイベントで処理されているのですか?
状況からするとKeyDown/KeyUpイベントのどちらかだと思いますが、
「,」という文字が入力されたかどうかで処理をしたいのであれば、
KeyDown/KeyUpイベントではなくKeyPressイベントでe.KeyCharを見て判断してください。

「,」という文字が入力されたかでなく、あくまで「,」キーが押されたかどうかを判断したいのであれば、

e.KeyCode == Keys.Oemcomma

の比較をすればよいです。
(e.KeyDataを使ってもよいですが、こちらを使う場合は、単純に==で比較するのではダメで、&演算子でビット演算をしてください)

> あとe.KeyCodeですと188が返ってくるので切り分けは出来ますがe.KeyDataで試したいということがあります、

上記の説明で書いたことと重複しますが、188というマジックナンバーではなく、Keys列挙型のOemcommaを使いましょう。

> もう一つご質問ですがなぜカンマで188になるのかがわかりません。アスキーコードでは44が返ってくるはずなんです

ASCIIコードではなくキーコードだからです。
引用返信 編集キー/
■30718 / inTopicNo.3)  Re[2]: カンマのKeyData
□投稿者/ 水虫中 (3回)-(2009/01/04(Sun) 16:29:10)
回答有難う御座います
KeyPressイベントでe.KeyCharを使用し出来ました。
有難う御座います。キーコードですか、勉強が足りてませんでした。学習します。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -