OnChangeイベントについて

解決


ファンタオレンジ  2003-06-12 01:01:35  No: 3746

適当なタイトルが思いつかず、「〜について」という形式のタイトルに
なってしまい申し訳ございませんが、よろしくお願いします。

Form上にEditBoxが配置されています。以下のコードでEditBoxに「a」と入力すると「Miss」とメッセージが出ます。「OK」と出るはずなのにおかしいな、と思っています。なぜ、このコードで「Miss」と表示されてしまうのか、ご教授お願いします。

procedure TForm1.Edit1Change(Sender: TObject);
var
    moji : string;
begin
    if moji = 'a' then
        ShowMessage('OK')
    else
        ShowMessage('Miss');
end;


にしの  2003-06-12 01:08:07  No: 3747

mojiの内容が、'a'になることは絶対にありません。
ローカル変数mojiは、''に初期化されています。


にしの  2003-06-12 01:11:48  No: 3748

嘘を書いてしまいました。
ローカル変数は、初期化されていません。
# そのため、偶然'a'になることがあるかもしれません

変数は初期化したほうがよいでしょう。

Edit1.Textの内容と'a'を比較したいのであれば、
if Edit1.Text='a' then ...
とするか、
moji := Edit1.Text;
としてから処理すると、期待通りの動作をすると思います。


Kob  2003-06-12 01:51:02  No: 3749

こんにちは。

string に限って、ローカル変数でも初期化されるようです。(Delphi 6 の
場合)
ですから、moji は、'' に初期化されていると思います。


ファンタオレンジ  2003-06-12 02:19:11  No: 3750

にしのさん、ご回答下さりどうもありがとうございます。
質問する上で簡潔なコードとするために、あれこれいじっているうちに聞きたいことと違うコードになっていました。これじゃあ、当然ダメですよね・・・

再度質問させてください。

var
  mojiretu : string;  // 実現部で宣言しています。

procedure TForm1.FormCreate(Sender: TObject);
begin
    mojiretu := 'あい'
end;

procedure TForm1.Edit1Change(Sender: TObject);

begin
    if Edit1.Text = mojiretu then
        ShowMessage('OK')
    else
        ShowMessage('Miss');
end;

上記のコードで、IMEをOnにしてEditBoxに「あい」と入力してEnterキーを押すと「OK」と出たあと「Miss」とも出てしまいます。「OK」とだけ出てくれるのを期待しているのですが、無理でしょうか?何だか無理なような気がしてきました。


ファンタオレンジ  2003-06-12 02:26:32  No: 3751

Kobさん、こんにちは。

最初のコードは間違えということでお願いします。
FormCreate時に'a'を入れておいたのですが書き忘れてしまいました。
また、「a」を入れたコードだと、きちんと「OK」と表示されます。
あれこれ、いじっているうちに変なコードをアップしてしまいました。
お手をわずらわせてしまいすみませんでした。


にしの  2003-06-12 06:57:31  No: 3752

OnChangeはTextが変化すると呼ばれます。

IMEで「あい」と入力すると、1回で「あい」と入力しているように見えますが、「あ」「い」と送られています。
つまり、「あ」が入力されたときの'miss'が表示されるのです。

それと、missが表示されてからOKが出ますよね?
OKのダイアログをちょっとずらしてみてください。
# うちでは隠れて先に出ています。

もしタイミングが完全に逆であれば、OnChangeでShowMessage('miss')が実行される前に、次のメッセージが処理されているのかもしれません。
どちらにせよ、「あ」も処理されるために"miss"とでます。


ファンタオレンジ  2003-06-12 19:41:43  No: 3753

>OnChangeはTextが変化すると呼ばれます。

>IMEで「あい」と入力すると、1回で「あい」と入力しているように見えます>が、「あ」「い」と送られています。
>つまり、「あ」が入力されたときの'miss'が表示されるのです。

なるほど!合点がいきました。1回で「あい」と入力しているわけではないのですね。

>それと、missが表示されてからOKが出ますよね?

はい。そうでした。OKが上に出ているから先に出たと早とちりしていました。

この方法では無理なので、何とかOnChangeを使った別の方法を考えてみようと思います。ご教授下さり、どうもありがとうございました。


ファンタオレンジ  2003-06-12 19:42:48  No: 3754

解決済みでした。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加