2011-12-16 36 views
5

Tôi có Biểu mẫu TForm1 có 5 TEdit và 2 TBitBtn.Làm cách nào để đọc và thay đổi giá trị của điều khiển TEdit?

Tôi cũng cần chương trình để sau khi nhập dữ liệu số trong Edit1Edit2 trên BitBtn1Click, Edit1Edit2 giá trị sẽ tóm tắt và sẽ được hiển thị trong Edit3.

+3

Bạn không cần phải cho chúng tôi biết tên của bạn trong câu hỏi của bạn. Nó ở ngay bên dưới câu hỏi. Ngoài ra, tôi đã thêm thẻ delphi chung, ngoài thẻ delphi-xe2 vì điều đó sẽ nhận được câu hỏi của bạn trước nhiều người trả lời tiềm năng hơn. Cuối cùng, vui lòng không đặt liên kết tải xuống trong câu hỏi. Chúng tôi không muốn tải xuống mọi thứ. Đặt mã trong câu hỏi và định dạng nó. –

Trả lời

4

Bạn muốn làm một cái gì đó như thế này:

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

Nếu bạn muốn nổi điểm số học làm điều đó như thế này

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

Để đọc và thiết lập giá trị của một điều khiển TEdit, bạn chỉ cần tham khảo tài sản Text của kiểm soát. Thuộc tính Text có kiểu String.

Vì Văn bản là thuộc tính Chuỗi nên bạn có thể xử lý nó trong mã của mình dưới dạng biến Chuỗi. Bạn có thể vượt qua nó vào một chức năng mà sẽ là một chuỗi liên tục:

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

Bạn có thể gán nó vào một biến String với một nhiệm vụ đơn giản:

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

Để thiết lập giá trị của một điều khiển TEdit, bạn chỉ cần gán một chuỗi cho thuộc tính Text. Đây có thể là một chuỗi liên tục:

Edit1.Text := 'hello'; 

Hoặc nó có thể là từ một String biến:

Edit1.Text := myString; 

Math được thực hiện trên các loại số, vì vậy đối với số học, bạn sẽ cần phải sử dụng một chức năng để chuyển đổi các giá trị chuỗi thành số.

Đối với Integer số học, bạn có thể sử dụng StrToInt() hoặc 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; 

Sử dụng 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; 

Đối với điểm số học nổi, sử dụng StrToFloat() hay StrToFloatDef() để thay thế.

Để gán một Integer trở lại thuộc tính Text, bạn sẽ cần phải chuyển đổi Integer vào một String trước khi bạn gán nó:

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

Đối với điểm nổi, sử dụng FloatToStr().

Cuối cùng, để đưa tất cả mọi thứ lại với nhau, để có được các giá trị số của hai hộp chỉnh sửa và hiển thị tổng trong một hộp soạn thảo thứ ba, chỉ cần làm điều này:

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; 

Hoặc trong một bước:

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

bạn quên đặt câu lệnh try..except để kiểm tra đầu vào không phải là số. – Johan

+1

@Johan, đó là cố ý, mặc dù tôi đã cảnh báo về ngoại lệ. Giữ nó đơn giản. –

4

tôi nhận thấy đoạn mã sau:

để sau khi nhập dữ liệu số trong Edit1 và Edit2

Nếu bạn chỉ muốn cho phép dữ liệu Số, bạn nên không cho phép dữ liệu không phải số trong các hộp chỉnh sửa.
Dưới đây là cách thực hiện điều đó.

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; 

Nếu bạn chỉ có dữ liệu số nguyên, điều này sẽ làm, nếu bạn có con số khoa học, bạn cần phải làm một số xét nghiệm cho chữ e và dấu thập phân cũng như để cho phép số vô tỉ.
Bất kể bạn làm gì thì tốt nhất là kiểm tra xem đầu vào có phải là số hợp lệ không và cho người dùng biết.

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; 

Lưu ý rằng bạn có thể đính kèm tổ chức sự kiện này cho cả Edit1Edit2, vì vậy bạn không cần phải viết mã hai lần. (Nhưng tôi chắc rằng bạn đã biết điều đó).

enter image description here (Cả hai bản chỉnh sửa đều chia sẻ cùng một sự kiện).

Điều quan trọng cần nhớ

  • Luôn luôn sử dụng try..except để bắt lỗi để chương trình của bạn không phá vỡ với một lỗi, xem: http://www.delphibasics.co.uk/Article.asp?Name=Exceptions
  • Nếu bạn có một editbox rằng chỉ cho phép dữ liệu số, hãy xem xét sử dụng một maskedit chỉ cho phép các ký tự hợp lệ hoặc mã bộ lọc của riêng bạn (nếu nó không quan trọng để làm như vậy).
  • Hãy thử và sử dụng một thói quen duy nhất cho nhiều điều khiển, vì vậy bạn không kết thúc với nhiều thói quen rất giống nhau mà tất cả làm gần như cùng một điều. Bằng cách đó, nếu bạn thay đổi một cái gì đó, bạn sẽ chỉ phải thay đổi nó trong một nơi và nó sẽ hoạt động trong tất cả các điều khiển sử dụng thói quen đó.
+0

Tôi thích cách tiếp cận màu sắc. Tôi thường ngăn họ thậm chí nhập các ký tự không phải chữ số thông qua OnKeyDown, điều này hơi khó khăn hơn một chút. –

+0

@MarcusAdams, tôi cũng sử dụng "không có alpha" trong trường số, nhưng điều đó không ngăn người dùng nhập '1254-121-1512' vào trường có nghĩa là cho dữ liệu số nguyên thuần túy. – Johan

+0

Nó có thể trở nên phức tạp. Tôi cũng sử dụng TSpinEdit rất nhiều. –

Các vấn đề liên quan