我正在使用CSpinButtonCtrl修改好友CEdit的整数值。当值大于1.000时,CSpinButtonCtrl会在数字中放置一个千位分隔符,这是一个不错的选择。问题在于MFC的直接数据交换仅读取千位分隔符之前的数字,因此CEdit中的1.000在与之交换值的int中变为1。
现在,我只是检查CEdit是否有数千个分隔符,并且每次更改时都用逗号隔开,然后可以像这样删除它:
//get current line from CEdit
CString line;
CEdit* pEdit = (CEdit*)GetDlgItem(nId);
pEdit->GetWindowText(line);
//replace periods and commas with nothing
line.Replace(".", "");
line.Replace(",", "");
//Write the CString back to the CEdit
pEdit->SetWindowText(line);
//Set the cursor to the end of the line again
pEdit->SetFocus();
pEdit->SetSel(-1);
但是,这显然有点hacky,当用户输入数字而不是CEdit的结尾时,它会给出错误的行为。 CEdit已设置为“仅数字”,但是CSpinButtonCtrl会忽略它,或者允许将千位分隔符或逗号作为数字。
是否没有办法简单地关闭数千个分隔符期间的放置?无论如何我都不需要它。
最佳答案
在这种情况下,从CSpinButtonCtrl
的create()
函数的documentation中:
dwStyle
指定旋转按钮控件的样式
这些样式之一是:
UDS_NOTHOUSANDS
不会在每个之间插入千位分隔符
三个十进制数字。
因此,请确保将CSpinButtonCtrl
的样式设置为禁用千位分隔符。您可能可以通过属性window中的“旋转按钮”样式来完成此操作
关于c++ - CSpinButtonCtrl在伙伴CEdit中放置不必要的千位分隔符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36738667/