- PR -

KeyPressイベントの判定

投稿者投稿内容
ZingBay
常連さん
会議室デビュー日: 2004/02/16
投稿数: 27
お住まい・勤務地: 古の奈良
投稿日時: 2004-02-17 10:35
NAL-6295様、レス有難うございます。

引用:

NAL-6295様の書き込み (2004-02-17 10:24) より:

大文字、小文字を判別しないようにToUpperされたらいいんじゃないですか?

コード:
        Select Case Char.ToUpper(ex.KeyChar)



というわけです。Aとaを判別する必要がありません。


これも考えました。実装する際の選択肢としてはアリだと思います。
が、いまいちエレガントさに欠ける気がして(失礼しました)
迷っております。
ZingBay
常連さん
会議室デビュー日: 2004/02/16
投稿数: 27
お住まい・勤務地: 古の奈良
投稿日時: 2004-02-17 10:39
よねKEN様、レス有難うございます。

引用:

よねKEN様の書き込み (2004-02-17 10:28) より:
(snip)
「キートップにAと印字されたキー」=Keys.Aです。

KeyPressイベントはキーボードの操作を追跡するイベントではなく、
キー操作により入力された文字データを操作するイベントですので、
KeyPressイベント内で使用するのはキーコードではなく、文字コードが正解です。
VB6でのvbKey〜を使う手法は、ある文字を入力する場合に、
文字コードとキーコードが同じであることを利用しているに過ぎません。
つまり、本来の意味から言えば正確なコードではありません。


うーむ、そうですね。
仮想キー(Virtual Key)のような指定ができるのかと思っていました。

引用:


標準的に使用できるかどうかは別として、単純に

If (e.KeyChar() > "9" OrElse e.KeyChar() < "0") _
AndAlso e.KeyChar <> "." _
AndAlso e.KeyChar <> "-" _
AndAlso e.KeyChar() <> vbBack Then

e.Handled = True
End If

のような感じで用途に応じて不要なキーだけはじけばよいと思います。
もちろんこれだけだと"-"や"."を2個以上入れられた場合や
その入力位置等の制御はありませんので、完全ではありません。
この例では、ペーストにも対策はしていません。
(カンマは入力させません)

問題はどこまでやるか?です。コストパフォーマンスを考えて、
どこまで対応するか決めてください。



オーバーライドされる側は多いですが、呼ばれる関数は
少ないので頑張って対応しようと思います。
有難うございました。

φZingBay

スキルアップ/キャリアアップ(JOB@IT)