Xin lỗi nếu điều này quá nhỏ, nhưng tôi không thể tìm ra cách lấy giá trị số được nhập vào điều khiển chỉnh sửa. Điều khiển chỉnh sửa MFC được thể hiện bởi lớp CEdit.cách lấy giá trị số từ điều khiển chỉnh sửa
Cảm ơn bạn.
Xin lỗi nếu điều này quá nhỏ, nhưng tôi không thể tìm ra cách lấy giá trị số được nhập vào điều khiển chỉnh sửa. Điều khiển chỉnh sửa MFC được thể hiện bởi lớp CEdit.cách lấy giá trị số từ điều khiển chỉnh sửa
Cảm ơn bạn.
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
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);
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.
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