- PR -

Win98とWinXPで動作が異なる

投稿者投稿内容
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-01-16 13:04
引用:

くろすけさんの書き込み (2004-01-16 09:32) より:

Jittaさんの文字コードの違いではないかというご指摘ですので、その辺をもう少し
掘り下げて調べてみます。ありがとうございます。
また、ご報告します。



同じ内容の投稿がGDNJにもありましたが、
もしその投稿がくろすけさんなら、
同じようにフィードバックしてくださいね。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
くろすけ
会議室デビュー日: 2004/01/15
投稿数: 4
投稿日時: 2004-01-21 08:52
根本的な解決ができておりませんが、途中報告します。
Windows98の場合、KeyPressイベントで受け取れるKeyPressEventArgs.KeyChar
が、半角英数カナの場合はご指摘頂いたようにUNICODEになっており、SJISにコンバート
することにより解決したかに見えました。
しかし全角文字を入力すると、KeyPressイベントが2回走ってしまいます。
1回目のイベントでは、KeyCharは3F固定のようです。この辺の法則を使って無理矢理
でも例外ロジックにて対応しようと思っています。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-01-21 09:25
くろすけさん、お早うございます。

引用:

しかし全角文字を入力すると、KeyPressイベントが2回走ってしまいます。
1回目のイベントでは、KeyCharは3F固定のようです。この辺の法則を使って無理矢理
でも例外ロジックにて対応しようと思っています。


TextChanged イベントで文字列を1文字ずつなめて処理する、ってのはナシですか?
これならコピペにも対応出来ますし...。
くろすけ
会議室デビュー日: 2004/01/15
投稿数: 4
投稿日時: 2004-01-21 09:39
きくちゃんさん、おはようございます。
引用:

TextChanged イベントで文字列を1文字ずつなめて処理する、ってのはナシですか?
これならコピペにも対応出来ますし...。




これだけハマってしまうと、本当にそう思います。
内情を申しますと、FormのKeyPressで入力制御を行っているVB6資産が
大量にありまして、何とか同じイベント処理にてできないかとあがいて
おります...。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-01-21 14:57
こんにちは

>Windows98の場合、KeyPressイベントで受け取れるKeyPressEventArgs.KeyChar
>が、半角英数カナの場合はご指摘頂いたようにUNICODEになっており、SJISにコンバート
>することにより解決したかに見えました。

関数の仕様を見たのですががもともとKeyCharにはUniCodeがはいるのが正しいみたいです。

if( e.KeyChar == (char)'ア' )
e.Handled = true;<-★

ただし上のコードをWindows2000環境で試してみた所「★」の処理は通るのですが
イベントはキャンセルされないみたいです。

なのでもしかするとXPでも98でも上のコードなら「★」のところの処理を通るかも
しれません。

ただイベントがキャンセルできないことがあるので、やはりきくちゃんさんの言う通り
TextChanged イベントで処理するのが無難かもしれません。


[ メッセージ編集済み 編集者: ゆうじゅん 編集日時 2004-01-21 14:59 ]

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