我创建了一个简单的应用程序,它使用带有wxFILTER_NUMERIC的裸TextCtrl小部件,以便只接受数值(参见下面的代码)。
我希望这些值具有固定的显示精度,而不管用户如何输入它们(例如,如果指定了17.0或17.000000值,则总是显示17.0000)。我发现在wxPython中有一个选项可以使用派生的NumCtrl小部件(http://wxpython.org/docs/api/wx.lib.masked.numctrl-module.html)来完成这项工作但我找不到它在基本的wxWidgets库中。
那么,是否有一个现成的解决方案可用于某些地方,我根本无法找到或者我必须编写一个函数,该函数将在插入后手动更改数字的格式(处理EVT_TEXT和EVT_TEXT_ENTER事件并修改输入字符串)?
到目前为止我所拥有的:
活动表
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(ID_Quit, MyFrame::OnQuit)
EVT_MENU(ID_About, MyFrame::OnAbout)
EVT_TEXT(ID_textBox, MyFrame::ValueChanged)
EVT_TEXT_ENTER(ID_textBox, MyFrame::ValueChanged)
END_EVENT_TABLE()
在MyFrame中实施文本框
wxPanel *panel = new wxPanel(this, -1);
_textBox1 = new wxTextCtrl(panel,
ID_textBox,
"0.0000",
wxPoint(100, 100),
wxSize(80,20),
wxTE_PROCESS_ENTER,
wxTextValidator(wxFILTER_NUMERIC,&_myValue),
wxTextCtrlNameStr);
处理功能
void MyFrame::ValueChanged(wxCommandEvent& WXUNUSED(event))
{
// modify the string or do something clever
}
解决方案已采用 由于答案,问题已得到解决。这就是我的目的:
`
wxFloatingPointValidator<double> _val(2,&_myValue,wxNUM_VAL_ZERO_AS_BLANK);
_val.SetRange(0.,100.); // set allowable range
_textBox1 = new wxTextCtrl(panel, // create a textCtrl
ID_textBox,
"0.0000",
wxPoint(100, 30),
wxSize(80,20),
wxTE_PROCESS_ENTER,
_val, // associate the text box with the desired validator
wxTextCtrlNameStr);
`