フォーカス移動時にメッセージボックス表示したい


フォーカス  2007-02-16 20:18:07  No: 24898

1.Edit1のOnExit で ShowMessage する。
2.Edit2にフォーカスが移るが、キーボードの入力を受け付けない。

なんで?

これは、C#、VB.NET の OnValidate,OnValidated,
VB6 の OnValidate でも同様です。
VB6 の OnLostFocus では正常に動きます。

WINDOWSの仕様ですか?


HOta  2007-02-16 20:27:08  No: 24899

いまD7でフォームにEdit1,Edit2を置いてやってみましたが、Edit2でキーボードから入力できました。


フォーカス  2007-02-17 01:27:27  No: 24900

>>HOta

ソース見せてくれませんか?
ちなみにOSは何ですか?

私はXP-HOMEでD7で次のようなことをやりました。

Procedure TForm1.Edit1OnExit(Sender : TObject);
Begin
    ShowMessage('');
End;

Edit1のOnExitを上記のようにして、
Edit1から、Edit2にマウスでフォーカスを動かすと
Edit2にフォーカスは移動するものの、キーボード入力を受け付けなくなりました。
もう一度、Edit2をクリックすると入力できるようになりました。


Basser  2007-02-17 02:58:02  No: 24901

フォーカス移動イベントでShowmessageを呼び出しているのが原因です。

詳しくは下記サイトで OnExit Showmessage をキーワードに調べてみてください。

http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/search.cgi


さどやま  URL  2007-02-17 04:04:05  No: 24902

Basser さんの回答のとおりですが、ちょうど Delphi ML でも同種の質問が出ていて過去ログを調べていました。

ShowMessage=モーダルダイアログの扱いについて
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=069276
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=069562
あたりが核心です。


HOta  2007-02-17 17:44:10  No: 24903

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Edit1Exit(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  ShowMessage('OnExit');
end;

end.
でEdit2を選択すると、ダイアログを表示して、その後、Edit2にフォーカスは移ります。


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

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






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