2011-07-13 8 views
1

私は、ユーザー入力用に2つのTextControlを持つWxWidgetパネルを持っています。 1つのTextControl入力は、他の入力フィールドの値を変更します。私は1つTextControl内のテキストが変更されたときに特定のポイントでwxWidgetsイベントを抑制して、相互の処理を防止します

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 

} 

問題は、それが正しく他の値を変更している... EVT_COMMAND_TEXT_UPDATEイベントを使用し、「OnValueChanged」のような関数にそれを結合しました。しかし、他の入力でテキストが変更されるとすぐに、TEXT_UPDATEイベントが発生し、現在のユーザーの入力が更新され、面白いカーソルのジャンプなどが発生します。

値を変更しながらこれらのイベントを実行することは可能ですか他のTextControlのTEXT_UPDATEイベントは発生しません。ユーザーがこのテキストコントロールに対して何らかの入力を行った場合、通常どおりに動作するはずです。

答えて

4

たぶん、あなたはテキスト値を設定し、(IsModifiedはすぐSetValueへの呼び出し後にfalseを返すことを意味する)、変更されないような制御をマークし

wxTextCtrl::ChangeValue

virtual void ChangeValue(const wxString& value) 
を使用することができます。

この機能では、wxEVT_COMMAND_TEXT_UPDATEDイベントは生成されません。これはSetValueとの唯一の違いです。詳細については、このトピックを参照してください。

+0

どうもありがとう – Benjamin

関連する問題