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);
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 って何なのか分かりかねますが・・。
あ。逆だ(汗)
FloatToStr ?
こうかな(笑)
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;
参考になりました
ありがとうございます
参考までに簡潔に書きたいだけなら、これ以上ないぐらい省略(笑
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への入力を数字だけに制限すれば処理そのものが不要ですけどね・・・
ツイート | ![]() |