我正在使用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会忽略它,或者允许将千位分隔符或逗号作为数字。

是否没有办法简单地关闭数千个分隔符期间的放置?无论如何我都不需要它。

最佳答案

在这种情况下,从CSpinButtonCtrlcreate()函数的documentation中:


  dwStyle
  指定旋转按钮控件的样式


这些样式之一是:


  UDS_NOTHOUSANDS
  不会在每个之间插入千位分隔符
  三个十进制数字。


因此,请确保将CSpinButtonCtrl的样式设置为禁用千位分隔符。您可能可以通过属性window中的“旋转按钮”样式来完成此操作

关于c++ - CSpinButtonCtrl在伙伴CEdit中放置不必要的千位分隔符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36738667/

10-13 06:49