【问题标题】:Calling an event handler after text has been modified in wxWidgets在 wxWidgets 中修改文本后调用事件处理程序
【发布时间】:2011-06-11 12:38:35
【问题描述】:

我试图在我的 wxWidgets 应用程序中创建一种情况,用户可以在文本框中输入内容,如果文本框中有一个或多个字符,则启用其他控件。因此,我创建了一个事件处理程序来检查事件 wxEVT_COMMAND_TEXT_UPDATED 上的 TextBox->IsEmpty()。但是,这似乎是在文本框中的文本发生更改之前调用的。有没有办法在更改发生后触发事件? 谢谢。

编辑:我正在使用的代码。 我使用 Connect() 来设置事件处理,所以没有事件表可言。这是我正在使用的代码:

cur->mTextBox = new wxTextCtrl(mParentFrame, wxID_ANY, wxT(""), wxDefaultPosition, wxDefaultSize);
mParentFrame->Connect(wxID_ANY, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler(iguiFrame::correctTextBoxes));

correctTextBoxes 是我的 wxFrame 派生类的公共方法,它调用的函数只包含以下代码:

if(cur->mTextBox->IsEmpty())
{
    wxMessageBox("Empty!");
}

消息框总是来不及弹出“一个字符”。

【问题讨论】:

  • 你的意思是 wxTextCtrl::IsEmpty() 吗?
  • 该事件在更改后触发。如上所述,您的代码应该可以工作。您需要发布实际代码,以便我们查看可能出现的问题。从事件表、事件处理程序和 wxTextCtrl 构造函数调用开始。
  • 谢谢。是的,抱歉,我的意思是 wxTextCtrl::IsEmpty(),但我的 wxTextCtrl 的名称是 TextBox。

标签: c++ wxwidgets


【解决方案1】:

正如@ravenspoint 所提到的,这个事件应该在进行更改后触发,但我还想指出,即使在更改之前触发事件的情况下,更改几乎总是通过使用 event 参数进入您的事件处理程序。

因此,对于这种情况,您实际上可能只想检查正确TextBoxes() 中 event.GetString() 的值,以查看在文本控件上设置的新值。

【讨论】:

    猜你喜欢
    • 2011-01-31
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    相关资源
    最近更新 更多