按Enter键进入WxWidgets文本控件时防止换行

时间:2011-07-30 13:02:07

标签: c++ newline wxwidgets

我正在使用WxWidgets编写应用程序,并遇到了多行文本控件(wxTextControl)的问题。它是聊天窗口中的输入字段,如果用户键入需要换行的较长消息,则需要多行。我想要发送事件,例如按下发送按钮时执行的操作,当用户按下控件中的enter键时执行。我使用wxEVT_COMMAND_TEXT_ENTER事件,并启用了wxTE_PROCESS_ENTER样式。然而,问题是当send命令执行时,新的行字符\ n也会附加到文本中(这发生在send命令之后和我清除文本之后,导致一个空字段除了一个新的线)。我试图通过捕获char和key down事件来避免这种情况,但由于某种原因它们没有触发。

我只想避免显示新行。有人有任何提示吗?

我正在开发Windows,但该应用程序可以在WxWidgets支持的所有平台上运行。

1 个答案:

答案 0 :(得分:0)

您可以在输入换行符时跟踪wxEVT_COMMAND_TEXT_UPDATED并清除编辑器(假设您在按下Enter键时也清除了编辑器)。

BEGIN_EVENT_TABLE(Test,wxFrame)
    EVT_TEXT_ENTER(EditorID, Test::OnEnter)
    EVT_TEXT(EditorId, Test::OnText)
END_EVENT_TABLE()

void Test::OnEnter(wxCommandEvent&)
{
    Send(editor->GetValue());
    editor->Clear();
}

void Test::OnText(wxCommandEvent& event)
{
    if (event.GetString() == wxT("\n")) { //seems to work, not much info in documentation?
        editor->Clear();
    }
}