1.Edit1のOnExit で ShowMessage する。
2.Edit2にフォーカスが移るが、キーボードの入力を受け付けない。
なんで?
これは、C#、VB.NET の OnValidate,OnValidated,
VB6 の OnValidate でも同様です。
VB6 の OnLostFocus では正常に動きます。
WINDOWSの仕様ですか?
いまD7でフォームにEdit1,Edit2を置いてやってみましたが、Edit2でキーボードから入力できました。
>>HOta
ソース見せてくれませんか?
ちなみにOSは何ですか?
私はXP-HOMEでD7で次のようなことをやりました。
Procedure TForm1.Edit1OnExit(Sender : TObject);
Begin
ShowMessage('');
End;
Edit1のOnExitを上記のようにして、
Edit1から、Edit2にマウスでフォーカスを動かすと
Edit2にフォーカスは移動するものの、キーボード入力を受け付けなくなりました。
もう一度、Edit2をクリックすると入力できるようになりました。
フォーカス移動イベントでShowmessageを呼び出しているのが原因です。
詳しくは下記サイトで OnExit Showmessage をキーワードに調べてみてください。
http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/search.cgi
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
あたりが核心です。
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にフォーカスは移ります。
ツイート | ![]() |