如何读取和更改TEdit控件的值?

时间:2011-12-16 17:59:29

标签: delphi

我的表格TForm1有5 TEdit和2 TBitBtn

我还需要该程序,以便在Edit1输入数字数据并在Edit2上输入BitBtn1Click后,Edit1Edit2值将相加并且将会显示在Edit3

3 个答案:

答案 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;

请注意,您可以将此事件附加到Edit1Edit2,因此您不必编写代码两次。 (但我相信你已经知道了。)

enter image description here(两个编辑共享相同的事件)。

要记住的重要事项

  • 始终使用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));