void InsertInfoDialog::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_ID, m_nID); DDX_Text(pDX, IDC_Name, m_strName); DDX_Text(pDX, IDC_Price, m_dPrice); DDX_Text(pDX, IDC_Count, m_nCount); } 为什么当我在运行的时候输入结束会出现弹窗,“请输入一个数字。”。该怎么解决 其中m_nID,m_strName,是CString类型,m_dPrice是double类型,m_nCount是int类型 对于这两个 DDX_Text(pDX, IDC_Price, m_dPrice); DDX_Text(pDX, IDC_Count, m_nCount); 该怎么进行修改
时间: 2023-06-15 12:02:55 浏览: 63
弹窗提示“请输入一个数字。”的原因是因为程序在将用户输入的数据转换为相应的数据类型时发生了错误。对于m_dPrice和m_nCount这两个变量,应该在输入时进行类型检查,确保用户输入的是数字类型的数据。
可以使用DDV_Double和DDV_Int宏来进行类型检查。例如,将DDX_Text(pDX, IDC_Price, m_dPrice)修改为如下代码:
```
DDX_Text(pDX, IDC_Price, m_dPrice);
DDV_MinMaxDouble(pDX, m_dPrice, 0.0, 10000.0); //限制用户输入的价格在0到10000之间
```
将DDX_Text(pDX, IDC_Count, m_nCount)修改为如下代码:
```
DDX_Text(pDX, IDC_Count, m_nCount);
DDV_MinMaxInt(pDX, m_nCount, 0, 1000); //限制用户输入的数量在0到1000之间
```
这样就可以在用户输入非数字类型的数据时,及时弹出提示框进行提醒,保证程序的健壮性。
相关问题
void InsertInfoDialog::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_ID, m_nID); DDX_Text(pDX, IDC_Name, m_strName); DDX_Text(pDX, IDC_Price, m_dPrice); DDX_Text(pDX, IDC_Count, m_nCount); } 为什么当我用DDX_Text绑定时,会出现弹窗,“请输入一个整数”。该怎么解决 其中m_nID,m_strName,是CString类型,m_dPrice是double类型,m_nCount是int类型 给出修改后的代码
这个弹窗是因为你在绑定一个整型的变量时,输入的字符无法转换为整型,所以会提示输入一个整数。有几种解决方法:
1. 将输入框的属性设置为数字类型,这样输入框只能输入数字,避免了输入非数字字符的情况。
2. 在绑定时,将第三个参数设为TRUE,表示使用强制转换,这样就会将输入框中的字符强制转换为要绑定的类型。例如:
DDX_Text(pDX, IDC_ID, m_nID, TRUE);
3. 自定义一个验证函数,用于判断输入的字符是否符合要求,如果不符合,则弹出自定义的错误提示框。例如:
void InsertInfoDialog::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_ID, m_nID);
DDX_Text(pDX, IDC_Name, m_strName);
DDX_Text(pDX, IDC_Price, m_dPrice);
DDX_Text(pDX, IDC_Count, m_nCount, ValidateCount);
}
void InsertInfoDialog::ValidateCount(CDataExchange* pDX, int nIDC, int& value)
{
CString strValue;
pDX->m_pDlgWnd->GetDlgItemText(nIDC, strValue);
if (!IsNumeric(strValue))
{
AfxMessageBox(_T("请输入一个整数!"));
pDX->Fail();
}
else
{
value = _ttoi(strValue);
}
}
bool InsertInfoDialog::IsNumeric(CString strValue)
{
int nLength = strValue.GetLength();
for (int i = 0; i < nLength; i++)
{
if (!_istdigit(strValue[i]))
{
return false;
}
}
return true;
}
这里的ValidateCount函数,就是用来验证输入的Count是否为整数的函数,如果不是,则弹出一个提示框。
void CMfcSnakeDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_COMBO_speed, Box); DDX_Control(pDX, IDC_EDIT_score, EDIT_Score); }
这段代码是什么意思?
这段代码是 MFC (Microsoft Foundation Classes)中的一个对话框类 CMfcSnakeDlg 的成员函数 DoDataExchange。它是用来实现数据交换的功能,将对话框中的控件与成员变量绑定起来,使得程序可以在运行时自动地将控件的值赋给成员变量,或者将成员变量的值显示在控件上。
具体来说,这段代码中有两个控件被绑定了:一个是 IDC_COMBO_speed,它是一个下拉框控件,被绑定到了名为 Box 的成员变量;另一个是 IDC_EDIT_score,它是一个编辑框控件,被绑定到了名为 EDIT_Score 的成员变量。这样,在程序运行时,可以通过 Box 和 EDIT_Score 来访问这两个控件的值。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![ppt](https://img-home.csdnimg.cn/images/20210720083527.png)