Форматирование wx.TextCtrl только с числовыми значениями – точность с плавающей запятойC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Форматирование wx.TextCtrl только с числовыми значениями – точность с плавающей запятой

Сообщение Anonymous »

Я создал простое приложение, которое использует простые виджеты TextCtrl с wxFILTER_NUMERIC, чтобы принимать только числовые значения (см. код ниже).

Я хочу, чтобы значения имели фиксированная точность отображения независимо от того, как их вводит пользователь (например, всегда будет отображаться 17,0000, если указаны значения 17,0 или 17,000000). Я обнаружил, что в wxPython есть возможность использовать производный виджет NumCtrl (http://wxpython.org/docs/api/wx.lib.mas ... odule.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 _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);
`

Подробнее здесь: https://stackoverflow.com/questions/144 ... -precision
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»