OnExitイベントの条件追加


ちょっちゅね  2008-10-23 08:24:45  No: 32335

Edit1のOnExitイベントについてです。
Edit1からカーソルが抜けてなおかつButton1が押されなかった場合
という処理はどう書けばいいのでしょうか?


igy  2008-10-23 09:19:29  No: 32336

ボタンをクリックしたかどうかを記憶するフラグを用意し、

  TForm1 = class(TForm)
  private
    { Private 宣言 }
    flg: Boolean;  // <==これ
  public
    { Public 宣言 }
  end;

フォームのOnCreateイベントで、
     flg := false;
のように初期化し、

ボタンのOnClickイベントで、
     flg := true;
を追加しておき、

そのフラグの値で、ボタンをクリックしたかどうか判断するのは
どうですか?


igy  2008-10-23 09:38:44  No: 32337

訂正です。

先ほど挙げた方法だと、
ボタンをクリックしてEdit1のOnExitイベントが発生した場合

ボタンのOnClickイベントで
     flg := true;
になる前に、Edit1のOnExitイベントが発生してしまうので、

>そのフラグの値で、ボタンをクリックしたかどうか判断するのは
>どうですか?

というのは、無理みたいですね。


ofZ  2008-10-23 21:06:47  No: 32338

こういうことかな?
フォームにEdit2個とボタンを置いて・・・

  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    ActiveControl,
    LastActiveControl  :TWinControl;
    procedure OnChangeActiveControl(aSender: TObject);
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Screen.OnActiveControlChange := OnChangeActiveControl;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if LastActiveControl <> Edit1 then begin
    Button1.Caption := 'OK';
  end
  else begin
    Button1.Caption := 'False!!';
  end;
end;

procedure TForm1.OnChangeActiveControl(aSender: TObject);
begin
  LastActiveControl := ActiveControl;
  ActiveControl := Screen.ActiveControl;
end;


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

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






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