簡體   English   中英

為 C++ 在 wxWidgets 中手動觸發 wxTextCtrl 上的 ENTER 按鍵事件?

[英]Manually trigger an ENTER key press event on wxTextCtrl in wxWidgets for C++?

我有這個文本控件:

FTextCtrl = new wxTextCtrl(parent, wxID_ANY, _("Text"), wxPoint(20, 20), wxDefaultSize, wxTE_CENTRE | wxTE_PROCESS_ENTER, wxDefaultValidator, _T("ID_TC"));
FTextCtrl->Connect(wxEVT_CHAR, (wxObjectEventFunction)OnTextCharEvnt, NULL, this);

每當在文本控件上按下Enter鍵時,都會調用此 function OnTextCharEvnt

如何手動觸發此事件(當我的文本 cursor 在文本控件內時)並使用相同的方法調用此 function OnTextCharEvnt

我使用EVT_TEXT_ENTER它有效;

樣本.h

enum{
 TEXT_FTextCtrl
}

樣本.cpp

FTextCtrl = new wxTextCtrl(parent, TEXT_FTextCtrl, wxT("Text"), wxPoint(20, 20), wxDefaultSize, wxTE_CENTRE | wxTE_PROCESS_ENTER, wxDefaultValidator, _T("ID_TC"));

BEGIN_EVENT_TABLE(Sample, wxFrame)
EVT_TEXT_ENTER(TEXT_FTextCtrl, Sample::OnTextCharEvnt)
END_EVENT_TABLE()

您無需觸發任何事件即可調用您自己的 function —— 直接調用即可。 直接調用事件處理程序很尷尬,不推薦,但這是一個避免它的簡單解決方案 - 只需有一個普通的 function ,您可以從該事件處理程序和直接調用:

void Sample::OnTextCharEvnt(wxCommandEvent& event) { DoHandleCharEvent(event.GetUnicodeKey()); }

void Sample::DoHandleCharEvent(wchar_t key) { ... your actual code for handling it ... }

void Sample::SomeOtherFunction() { DoHandleEnter(); }

如果您使用推薦的Bind() function 而不是舊的Connect() ,您甚至可以通過使用 lambda 來完全避免使用瑣碎的OnTextCharEvnt() ,例如:

FTextCtrl->Bind(wxEVT_CHAR, [](wxCommandEvent& event) {
    DoHandleCharEvent(event.GetUnicodeKey());
});

所有這些都忽略了這樣一個事實,即您首先應該將wxEVT_CHARwxTextCtrl一起使用,而應該處理wxEVT_TEXTwxEVT_TEXT_ENTER或兩者,而不是較低級別的字符事件(如果用戶粘貼,則根本不會觸發例如,控件中的某些東西)。

暫無
暫無

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

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