2012-05-07 49 views

Trả lời

8

CEdit xuất phát từ CWnd, vì vậy nó có một chức năng thành viên được gọi là GetWindowText mà bạn có thể gọi để có được những văn bản trong CEdit, và sau đó chuyển đổi đó vào loại số, int hay double - tùy thuộc vào những gì bạn mong đợi người dùng nhập vào:

CString text; 
editControl.GetWindowText(text); 

//here text should contain the numeric value 
//all you need to do is to convert it into int/double/whatever 
16

Bên cạnh phương thức GetWindowText đã đề cập, bạn cũng có thể liên kết nó qua DDX với giá trị nguyên/không dấu/đôi/phao. Hãy thử điều này:

void CYourAwesomeDialog::DoDataExchange(CDataExchange* pDX) 
{ 
    CDialog::DoDataExchange(pDX); 
    DDX_Text(pDX, IDC_EDIT_NUMBER, m_iNumber); 
} 

trong khi m_iNumber là thành viên của lớp CYourAwesomeDialog của bạn.

Bạn phải gọi

UpdateData(TRUE); 

để viết các giá trị từ các điều khiển vào các biến. Gọi số

UpdateData(FALSE); 

để thực hiện theo cách khác - từ các biến trong điều khiển.

EDIT (Bonus):

Sau khi đọc lại câu trả lời của tôi, tôi nhận thấy rằng UpdateData (...) cần một biến BOOL - sửa chữa. Vì vậy, tôi đã có một ý tưởng cho những người thích khả năng đọc. Bởi vì tôi luôn bị nhầm lẫn mà gọi đã hướng nào, bạn có thể giới thiệu một enum để làm cho nó dễ đọc hơn, như vậy (có lẽ trong stdafx.h hoặc một số tiêu đề trung ương):

enum UpdateDataDirection 
{ 
    FromVariablesToControls = FALSE, 
    FromControlsToVariables = TRUE 
} 

và bạn sẽ chỉ phải viết :

UpdateData(FromVariablesToControls); 

hoặc

UpdateData(FromControlsToVariables); 
1

Nếu bạn đang đi để cần chức năng mà thường xuyên, nói trên nhiều hộp thoại, sau đó bạn cũng có thể phân lớp lớp CEdit có nguồn gốc từ của riêng bạn để làm những việc, thiết lập và xác nhận công việc.

class CFloatEdit : public CEdit 
{ 
public: 
    CFloatEdit(); 
    void SetValue(double v) { 
     // format v into a string and pass to SetWindowText 
     } 
    double GetValue() { 
     // validate and then return atoi of GetWindowText 
     } 
    void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { 
     // only allow digits, period and backspace 
     } 
}; 

Điều gì đó giống như vậy, hãy đảm bảo bản đồ thư đi cùng tất cả các thư khác với CEdit gốc. Bạn có thể mở rộng nó để có tùy chỉnh giới hạn dưới và trên và số thập phân.

+0

Tôi sẽ sử dụng DDV để xác thực - nhưng bạn có thể chuyển con trỏ tới điều khiển này để làm nổi bật lỗi xác thực – CppChris

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