簡體   English   中英

C ++事件(焦點)處理

[英]C++ Event (Focus) Handling

由於評論,我添加了以下代碼

(在BasicPanel中)

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;
                ...    ...     ...
    }

當用戶將焦點轉移到他們正在使用的文本框上時,所有添加到代碼中的內容都將無效。


問題1:我正在使用wxWidgets(C ++),遇到了我找不到任何幫助的問題。 我創建了幾個wxTextCtrl框,希望程序在用戶“殺死焦點”時更新其中的簡單計算。 我在wxWidgets網頁上找不到關於此主題的任何文檔,並且對其進行谷歌搜索僅調出了wxPython。 我發現的兩個事件是: EVT_COMMAND_KILL_FOCUS - EVT_KILL_FOCUS ,我都找不到這兩個代碼段。 誰能給我一個簡短的例子,或引導我進入一個有用的頁面?

問題2:我是否必須為8個wxTextCtrl框中的每個框創建一個事件來處理被殺死的焦點? 如果我必須創建另一個事件:如何使每個事件彼此區分開? 我知道我將必須為每個wxTextCtrl框創建新的wxTextCtrl ,但是如何獲取正確的wxTextCtrl

 class BasicPanel : public wxPanel { ... wxTextCtrl* one; wxTextCtrl* two; wxTextCtrl* three; wxTextCtrl* four; ... } 

好的,首先,這是放在BasicPanel類中的代碼:

void OnKillFocus(wxFocusEvent& event);

然后將以下內容添加到BasicPanel構造函數的末尾:

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

您將需要為每個文本控件重復以上代碼,並將ID_TEXTCTRL替換為控件的實際ID。

然后,只要其中一個控件失去焦點,下面的代碼就會被調用。

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

要確定在OnKillFocus生成事件的控件的ID,可以使用以下命令:

event.GetId()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM