[英]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_CHAR
與wxTextCtrl
一起使用,而應該處理wxEVT_TEXT
或wxEVT_TEXT_ENTER
或兩者,而不是較低級別的字符事件(如果用戶粘貼,則根本不會觸發例如,控件中的某些東西)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.