C ++ Event (Focus) Обработка - PullRequest
       38

C ++ Event (Focus) Обработка

1 голос
/ 21 апреля 2010

Из-за комментариев я добавил следующий код

(в базовой панели)

Connect(CTRL_ONE, wxEVT_KILL_FOCUS, (wxObjectEventFunction)&BasicPanel::OnKillFocus);
Connect(CTRL_TWO,wxEVT_KILL_FOCUS, (wxObjectEventFunction)&BasicPanel::OnKillFocus);
Connect(CTRL_THREE, wxEVT_KILL_FOCUS, (wxObjectEventFunction)&BasicPanel::OnKillFocus);
Connect(CTRL_FOUR, wxEVT_KILL_FOCUS, (wxObjectEventFunction)&BasicPanel::OnKillFocus);
Connect(CTRL_FIVE, wxEVT_KILL_FOCUS, (wxObjectEventFunction)&BasicPanel::OnKillFocus);

(Перечисления)

    CTRL_NAME = wxID_HIGHEST + 5, // 6004
    CTRL_ADDRESS = wxID_HIGHEST + 6, // 6005
    CTRL_PHONENUMBER = wxID_HIGHEST + 7, // 6006
    CTRL_SS = wxID_HIGHEST + 8, // 6007
    CTRL_EMPNUMBER = wxID_HIGHEST + 9 // 6008

(функция OnKillFocus - объявление включено, как предлагается)

void BasicPanel::OnKillFocus(wxFocusEvent& event) {
    switch (event.GetId()) {
        case 6004:
            ...
            break;
                ...    ...     ...
    }

Все эти добавленные в код ничего не делают, когда пользователь меняет фокус на текстовое поле, которое он использует ...


Q1: я использую wxWidgets (C ++) и столкнулся с проблемой, что не могу найти какую-либо помощь. Я создал несколько ящиков wxTextCtrl и хотел бы, чтобы программа обновляла простые вычисления в них, когда пользователь «убивает фокус». Я не смог найти какую-либо документацию по этому вопросу на веб-странице wxWidgets, и поиск в Google привел к появлению только wxPython. Два события, которые я нашел: EVT_COMMAND_KILL_FOCUS - EVT_KILL_FOCUS, для которых я не смог найти ни одного фрагмента. Может ли кто-нибудь дать мне короткий пример или привести меня на страницу, которая будет полезна?

Q2: Должен ли я создать событие для обработки убитого фокуса для каждого из моих 8 wxTextCtrl ящиков? В случае, если мне нужно создать другое событие: как я могу заставить каждое событие отличаться друг от друга? Я знаю, что мне придется создавать новые wxID для каждого из wxTextCtrl блоков, но как мне получить правильный, который будет активирован?
class BasicPanel : public wxPanel { ...     
    wxTextCtrl* one;
    wxTextCtrl* two;
    wxTextCtrl* three;
    wxTextCtrl* four; ... }

1 Ответ

2 голосов
/ 21 апреля 2010

Хорошо, во-первых, вот код, который нужно вставить в ваш BasicPanel класс:

void OnKillFocus(wxFocusEvent& event);

Затем добавьте следующее в конец вашего BasicPanel конструктора:

Connect(ID_TEXTCTRL,
        wxEVT_KILL_FOCUS ,
        (wxObjectEventFunction)&BasicPanel::OnKillFocus);

Вам нужно будет повторить приведенный выше код для каждого текстового элемента управления и заменить ID_TEXTCTRL фактическим идентификатором элемента управления.

Тогда код ниже будет вызываться всякий раз, когда один из элементов управления теряет фокус.

void BasicPanel::OnKillFocus(wxFocusEvent& event)
{
    // code goes here...
}

Чтобы определить идентификатор элемента управления, который сгенерировал событие в OnKillFocus, вы можете использовать следующее:

event.GetId()
...