Skip to content Skip to footer

Создание собственных валидаторов значения текстового поля в wxWidgets

Еще одна статья от Александра (sandy) Илюшенко о создании собственного валидатора для wxTextCtrl.

Наверное каждый сталкивался с проблемой ввода логина пользователя, особенно если необходимо запретить ввод кириллических букв. Для реализации этой столь простой задачи напрашивается использовать wxTextValidator и его метод SetExcludes. Но, как по мне, не очень элегантно перед объявлением wxTextCtrl создавать экземпляр wxTextValidator и впихивать в него запрещенные для ввода символы. По-моему, гораздо удобнее использовать унаследованный от wxTextValidator класс. К тому же, его использование может быть неоднократным.

Вот потому лучше не полениться и один раз реализовать такой класс.

wxLoginValidator.h

#pragma once
#include <wx/valtext.h>

class wxLoginValidator : public wxTextValidator {
public:
    wxLoginValidator() : wxTextValidator(wxFILTER_EXCLUDE_CHAR_LIST)
    {
        wxArrayString a;
        wxString s=wxT("АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяЁёЄєЇїІі");
        for (size_t i=0;i<s.Len();i++) {
            a.Add(wxString(s&#91;i&#93;));
        }
        SetExcludes(a);
    }
};
&#91;/sourcecode&#93;
И использовать это уже гораздо проще.

<strong>Example.cpp</strong>
[sourcecode language="cpp"]
#include "wxLoginValidator.h"
/* ... */
wxTextCtrl* m_LoginCtrl = new wxTextCtrl(this, wxID_ANY, wxEmptyString,
	wxDefaultPosition, wxSize( 120,20 ), 0, wxLoginValidator());
m_LoginCtrl->SetMaxLength(8);
/* ... */

Leave a comment

0.0/5