我的表格TForm1
有5 TEdit
和2 TBitBtn
。
我还需要该程序,以便在Edit1
输入数字数据并在Edit2
上输入BitBtn1Click
后,Edit1
和Edit2
值将相加并且将会显示在Edit3
。
答案 0 :(得分:4)
你想做这样的事情:
var
val1, val2, sum: Integer;
...
val1 := StrToInt(Edit1.Text);
val2 := StrToInt(Edit2.Text);
sum := val1 + val2;
Edit3.Text := IntToStr(sum);
如果你想要浮点运算,就像这样做
var
val1, val2, sum: Double;
...
val1 := StrToFloat(Edit1.Text);
val2 := StrToFloat(Edit2.Text);
sum := val1 + val2;
Edit3.Text := FloatToStr(sum);
答案 1 :(得分: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;
请注意,您可以将此事件附加到Edit1
和Edit2
,因此您不必编写代码两次。 (但我相信你已经知道了。)
(两个编辑共享相同的事件)。
要记住的重要事项
try..except
来捕获错误,以便您的程序不会因错误而中断,请参阅:http://www.delphibasics.co.uk/Article.asp?Name=Exceptions maskedit
,或编写您自己的过滤器(如果这样做很简单)。 答案 2 :(得分:3)
要读取和设置TEdit控件的值,只需引用控件的Text
属性即可。 Text属性的类型为String。
由于Text是String属性,因此可以将代码视为String变量。您可以将它传递给期望String常量的函数:
// Edit1 is the name of the TEdit control
// Display the value in the edit control to the user
ShowMessage(Edit1.Text);
您可以使用简单的赋值将其分配给String变量:
var
// My string variable
myString: String;
begin
// Edit1 is the Name of the control
myString := Edit1.Text;
end;
要设置TEdit控件的值,只需将字符串分配给Text属性即可。这可能是一个String常量:
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()
。
要将Integer分配回Text属性,您需要在分配之前将Integer转换为String:
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;
或者一步到位:
Edit3.Text := FloatToStr(StrToFloat(Edit1.Text) + StrToFloat(Edit2.Text));