Editの入力をlabeに代入、CRキーで文字はlabelに残したままeditをクリアしたい

解決


かつやん  2004-05-23 19:23:45  No: 9095

Delphi  3.0を使用している初心者です。
ひとつのform でedit.textにキーボードから文字を入力して、label.captionに表示しています。
ここでCRキーを入力したらlabel.captionの文字表示はそのままにして、edit.textだけを次のデータ入力に備えてクリアしたいのですが、edit.clearすると残しておきたい文字のlabel.captionまでクリアされてしまいます。
過去ログを検索したり、HELPを見ながらプロパティをいろいろと試してみましたが自力解決できないので教えてください。


るるとん@K  2004-05-23 19:33:08  No: 9096

クリアするとonChangeが起きるので、
OnkeyDownでLabel.Captionを変更して下さい


rurutonn@K  2004-05-23 19:35:18  No: 9097

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key=VK_RETURN then Edit1.Clear else Label1.Caption:=Edit1.Text;
end;


るるとん@K  2004-05-23 19:40:04  No: 9098

こっちの方がいい

グローバル変数FlagHoge:Booleanを宣言

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
FlagHoge:=Key=VK_Return;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
if not FlagHoge then Label1.Caption:=Edit1.Text;
end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if FlagHoge then Edit1.Clear;
end;


かつやん  2004-05-23 22:24:40  No: 9099

るるとんさん、早速の回答を有り難うございます。

一文字づつEdit1.KeyPress()のイベントでキー入力を拾って、英数字チェックや大文字変換してLabel1.Captionに表示しています。
この入力ルーチンには教えて頂いたKeyDown()やKeyUp()でのイベント発生順序があるようでVK_Returnを検出したときに思惑通りに動きません。

>クリアするとonChangeが起きるので、
>OnkeyDownでLabel.Captionを変更して下さい

これをヒントにキー入力のイベント発生を順序良く組み込んで実現させてみます。


ふぐちゃん  2004-05-23 22:35:41  No: 9100

> 一文字づつEdit1.KeyPress()のイベントでキー入力を拾って
OnKeyPressで#13を取得して処理してはどうですか?
  if Key = #13 then
    { 処理 }


かつやん  2004-05-26 07:36:20  No: 9101

ようやく完成しました。
OnKeyPress()で、VK_RETUNの時にフラグをセットして、onChange()で
フラグを見てlabelに書き込みしたら、Edit.clearしても思惑通りに
動きました。

それぞれのイベントの順番を理解していないので苦労しました。
どうも有難う御座いました。


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

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






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