2011-12-16 13 views
5

私はフォームTEditと2 TBitBtnを持っています。TEditコントロールの値を読み込んで変更するにはどうすればよいですか?

BitBtn1ClickEdit1Edit2で数値データを入力した後、Edit1Edit2値が加算されますとEdit3に表示されるように、私はまた、プログラムが必要です。あなたはこのような何かやりたい

+3

あなたの質問にあなたの名前を教える必要はありません。それは質問の真下にある。また、delphi-xe2タグに加えて、一般的なdelphiタグを追加しました。これは、より多くの潜在的な回答者の前であなたの質問を得るためです。最後に、質問にダウンロードリンクを入れないでください。私たちは物事をダウンロードしたくありません。コードを質問に入れてフォーマットします。 –

答えて

4

:あなたは浮動小数点演算をしたい場合は

var 
    val1, val2, sum: Integer; 
... 
val1 := StrToInt(Edit1.Text); 
val2 := StrToInt(Edit2.Text); 
sum := val1 + val2; 
Edit3.Text := IntToStr(sum); 

がTEDITコントロールの値を読み、設定するには、この

var 
    val1, val2, sum: Double; 
... 
val1 := StrToFloat(Edit1.Text); 
val2 := StrToFloat(Edit2.Text); 
sum := val1 + val2; 
Edit3.Text := FloatToStr(sum); 
3

のようにそれを行うには、単に参照しますコントロールのTextプロパティ。 TextプロパティはString型です。

TextはStringプロパティなので、コード内でString変数として扱うことができます。あなたは、

var 
    // My string variable 
    myString: String; 
begin 
    // Edit1 is the Name of the control 
    myString := Edit1.Text; 
end; 

TEDITコントロールの値を設定するには:あなたは、単純な代入をString変数に割り当てることができ

// Edit1 is the name of the TEdit control 
// Display the value in the edit control to the user 
ShowMessage(Edit1.Text); 

:あなたは、文字列定数期待する関数に渡すことができますTextプロパティに文字列を代入するだけです。これは、文字列定数のようになります。

Edit1.Text := 'hello'; 

それとも、String型の変数から次のようになります。算術演算のために、あなたが機能を使用する必要がありますので、

Edit1.Text := myString; 

数学は、数値型で行われます文字列の値を数値に変換します。整数演算用

、あなたはStrToInt()StrToIntDef()を使用することができます。

var 
    myInteger: Integer; 
begin 
    // Convert Edit1.Text string to a number and assign to numeric type for math 
    // If the value in Edit1.Text cannot be converted, an exception will be raised 
    myInteger := StrToInt(Edit1.Text); 
end; 

StrToIntDef()を使用する:

var 
    myInteger: Integer; 
begin 
    // If Edit1.Text cannot be converted, the default value of 0 will be used 
    myInteger := StrToIntDef(Edit1.Text, 0); 
end; 

浮動小数点演算のために、代わりにStrToFloat()またはStrToFloatDef()を使用しています。

あなたはそれを割り当てる前に、バックTextプロパティに整数を割り当てるには、整数を文字列に変換する必要があります:浮動小数点の場合

var 
    myInteger: Integer; 
begin 
    myInteger := 12; 
    Edit1.Text := IntToStr(myInteger); 
end; 

FloatToStr()を使用しています。

var 
    // Floating point variables 
    value1: Real; 
    value2: Real; 
    sum: Real; 
begin 
    // Get the values from the edit boxes, converting them to floating point types 
    value1 := StrToFloat(Edit1.Text); 
    value2 := StrToFloat(Edit2.Text); 
    // Sum them 
    sum := value1 + value2; 
    // Convert the sum to string and assign back to edit box 
    Edit3.Text := FloatToStr(sum); 
end; 

をまたは1つのステップで:

最後に、2つのエディットボックスの数値を取得し、第三編集ボックスに合計を表示するために、一緒にすべてを置くために、単純にこれを行う

Edit3.Text := FloatToStr(StrToFloat(Edit1.Text) + StrToFloat(Edit2.Text)); 
+0

try ... except文を入力して、非数値入力をチェックするのを忘れてしまった。 – Johan

+1

@Johan、私は例外について警告しましたが、それは意図的でした。それを簡単に保つ。 –

4

私は、次のスニペットに気づい:ようEDIT1とEDIT2

で数値データを入力した後

数値データのみを許可する場合は、編集ボックスで数値以外のデータを許可しないことをお勧めします。
これを行う方法は次のとおりです。

const 
TabKey = #9; 
Backspace = #8; 
Enter = #13; 

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); 
begin 
    if not (Key in ['0'..'9','-',TabKey,Enter,Backspace]) then Key:= #0; //integers 
    //realnumbers: if not (Key in ['0'..'9','-','e','E','.',TabKey,Enter,Backspace]) then Key:= #0; 
end; 

だけ整数データを持っている場合、これはあなたが科学的な数字を持っている場合は、無理数を可能にするだけでなく、文字eと小数点のためのいくつかのテストを行う必要があり、行います。
何をしても、入力が有効な番号であることを確認してユーザーに知らせることをお勧めします。

procedure TForm1.Edit1Change(Sender: TObject); 
var 
    MyEdit: TEdit; 
    OtherEdit: TEdit; 
    TryNumber: double; 
    OtherNumber: double; 
    Success: boolean; 
begin 
    Success:= true; 
    if (Sender is TEdit) then begin 
    MyEdit:= TEdit(Sender); 
    try 
     if MyEdit.Text = '' then TryNumber:= 0 
     else TryNumber:= StrToFloat(MyEdit.Text); 
     MyEdit.Color:= clWindow; //all is OK make edit standard white. 
     MyEdit.Hint:= ''; 
    except 
     MyEdit.Color:= clRed; //Let the user know the output will not compute. 
     MyEdit.Hint:= MyEdit.Text + ' is not a valid number '; 
     Success:= false; 
    end; 
    end; 
    if (MyEdit = Edit1) then OtherEdit:= Edit2 
    else OtherEdit:= Edit1; 
    try 
    if OtherText.Text = '' then OtherNumber:= 0 
    else OtherNumber:= StrToFloat(OtherEdit.Text); 
    except 
    Success:= false; 
    end; 
    if Success then Edit3.Text:= FloatToStr(TryNumber + OtherNumber); 
end; 

あなたはEdit1Edit2の両方に、このイベントを添付することができますので、あなたは二度のコードを記述する必要はありません。 (しかし、私はあなたがすでにそれを知っていたと確信しています)。

enter image description here(どちらも同じイベントを共有します)。常に見、あなたのプログラムがエラーで破損しないようにエラーをキャッチするためにtry..exceptを使用

  • を覚えて

    重要なもの:http://www.delphibasics.co.uk/Article.asp?Name=Exceptions

  • を使用すると、数値データのみを許可するエディットボックスを持っている場合は、有効な文字のみを許可するmaskeditを使用するか、独自のフィルタをコード化することを検討してください(そうしなければ簡単です)。
  • 複数のコントロールに対して1つのルーチンを試してみてください。その結果、ほぼ同じことをする複数の非常に似たルーチンで終わることはありません。そうすれば、何かを変更した場合は、1つのの場所に変更するだけで、そのルーチンを使用するすべてのコントロールで動作します。
+0

私は色のアプローチが好きです。私は、OnKeyDownを使って数字以外の文字を入力することをしばしば防ぎます。これは少し難しくなります。 –

+0

@MarcusAdams、私は数値フィールドにも "アルファなし"を使用しますが、ユーザーが純粋な整数データのためのフィールドに '1254-121-1512'を入力することを妨げません。 – Johan

+0

複雑になることがあります。私はTSpinEditもたくさん使います。 –

関連する問題