我有一个带有两个TextControl的WxWidget面板供用户输入。一个TextControl输入更改另一个输入字段的值。我使用EVT_COMMAND_TEXT_UPDATE事件并将其绑定到像“OnValueChanged”这样的函数......
mTextCtrl1->Connect(wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler(MyClass::OnTextCtrlChanged1), NULL, this);
mTextCtrl2->Connect(wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler(MyClass::OnTextCtrlChanged2), NULL, this);
void MyClass::OnTextCtrlChanged1(wxCommandEvent &event) {
// ...
mTextCtrl2->SetValue(...); // Set a Hex value of entered Value in text ctrl 1
}
void MyClass::OnTextCtrlChanged2(wxCommandEvent &event) {
// ...
mTextCtrl1->SetValue(...); // Set a Integer value of entered Value in text ctrl 2
// at this point, MyClass::OnTextCtrl1 is handled,
// but should not, only if user himself enters something
}
问题是,当一个TextControl中的Text更改时,它会正确地更改另一个TextControl的值。但是,只要文本在其他输入中更改,它就会自动上升TEXT_UPDATE事件并更新当前用户的输入,从而导致有趣的游标跳跃等。
是否可以在更改其他TextControl的值时提供这些事件的执行,以便它不会上升其TEXT_UPDATE事件?如果用户为自己的文本控件做了一些输入,它应该照常工作。
答案 0 :(得分:4)
也许您可以使用wxTextCtrl::ChangeValue
virtual void ChangeValue(const wxString& value)
设置文本值并将控件标记为未修改(这意味着
IsModified
将在调用SetValue
后立即返回false。请注意,此函数不会生成
wxEVT_COMMAND_TEXT_UPDATED
事件。这是与SetValue
的唯一区别。有关详细信息,请参阅此主题。