case文を使って表現するには?

解決


初心者です  2006-05-12 10:52:00  No: 21495

edit1〜edit5までに入力された文字列が数値に変換できなかったらn(適当な数値)をそのeditに代入するというものを作りたいのですが、下記のif文をcase文を使って表現できないでしょうか?  
  if not TryStrToFloat(edit1.Text,Arr[0]) then
    edit1.Text:=FloatToStr(n);
  if not TryStrToFloat(edit2.Text,Arr[1]) then
    edit2.Text:=FloatToStr(n);
  if not TryStrToFloat(edit3.Text,Arr[2]) then
    edit3.Text:=FloatToStr(n);
  if not TryStrToFloat(edit4.Text,Arr[3]) then
    edit4.Text:=FloatToStr(n);
  if not TryStrToFloat(edit5.Text,Arr[4]) then
    edit5.Text:=FloatToStr(n);


f  2006-05-12 11:17:32  No: 21496

case A of
 B:
 C:
end;
case の A には 順序型にしか使えません。(ヘルプ参照)
B,C は、固定値である必要があったと思う。

これって何かのイベントハンドラ内なんでしょうか?
だとするなら、

function StrToFloatDef( S: string; Def: Single): single;
begin
    try
    Result:=StrToFloat( S);
    except
        Result:= Def;
    end;
end;

procedure TForm?.On??(Sender: TObject);
var
  Ed: TEdit;
  
begin
  Ed:= Sender as TEdit;
  
  Ed.Text:=:= StrToFloatDef( Arr[ Ed.Tag], n);

でシンプルにかけます。

そうでないなら、

for i:=0 to hoehoe.ComponentCount-1 do
begin
    if (Componets[i]  is TEdit) then
    begin
        Ed:= TEdit( Components[i]);       
        Ed.Text:= StrToFloatDef( Arr[ Ed.Tag],n);
    end;   
end;

ともかけます。

いずれにせよ、
Arr に使われている 0.. 4 を Edit1  ... Edit4 に
変換するには、 TEdit.Tag などを使って
事前に Edit1.Tag:=0 などのようにしておく必要が
あると思います。

n って何なのか分かりかねますが・・。


f  2006-05-12 11:18:44  No: 21497

あ。逆だ(汗)
FloatToStr ?


f  2006-05-12 11:22:09  No: 21498

こうかな(笑)
for i:=0 to hoehoe.ComponentCount-1 do
begin
    if (Componets[i]  is TEdit) then
    begin
        Ed:= TEdit( Components[i]);       
        if not TryStrToFloat( Ed.Text, Arr[Ed.Tag]) then
            Ed.Text:= FloatToStr(n)
    end;   
end;


初心者です  2006-05-13 06:02:26  No: 21499

参考になりました
ありがとうございます


解決してるけど、、  2006-05-17 22:49:02  No: 21500

参考までに簡潔に書きたいだけなら、これ以上ないぐらい省略(笑

var
i: Integer

for i := 0 to 4 do
  with FindComponent('Edit' + IntToStr(i)) As TEdit do
    if not TryStrToFloat(Text, Arr[i]) then
      Text := FloatToStr(n);

Editへの入力を数字だけに制限すれば処理そのものが不要ですけどね・・・


TMaskEdit  2006-05-18 05:06:14  No: 21501


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

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






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