TextChanged が C# のキーボードによってトリガーされたかどうかを確認するにはどうすればよいですか?
-
26-09-2019 - |
質問
私には方法があります
private void textBoxPilot_TextChanged(object sender, TextChangedEventArgs e)
{ ... }
ここで、問題のテキストボックスはユーザーから検索文字列を取得し、 ListBox
キーストロークごとに結果が表示されます。
その後、アイテムを選択すると、 ListBox
, 、選択も同様に反映してほしいです。 Textbox
. 。ただし、検索メカニズムをトリガーしたくありません。 Listbox
その選択を忘れるために。
かどうかをどのように判断できますか? TextChanged
イベントはユーザー (キーボードまたはコピー/ペースト経由) または別の方法によってトリガーされました。 textBoxPilot.Text = "Pilot name";
?
ありがとう。
解決
ちょっとしたハックですが....
public class MyForm : Form
{
private bool _ignoreTextChanged;
private void listView1_SelectionChanged( object sender, EventArgs e )
{
_ingnoreTextChanged = true;
textBoxPilot.Text = listView1.SelectedValue.ToString(); // or whatever
}
private void textBoxPilot_TextChanged( object sender, TextChangedEventArgs e )
{
if( _ignoreTextChanged )
{
_ignoreTextChanged = false;
return;
}
// Do what you would normally do.
}
}
他のヒント
無効なコントロールではイベントは発生しません。したがって、2 つのオプションは、テキストの更新を常に無効にしてから再度有効にするか、派生クラス ラッパーを作成するかのいずれかです (この方法を使用してもデータ バインディングを行うことはできます)。
class myClass : TextBox
{
public virtual string TextWithoutEvents
{
get
{
return base.Text;
}
set
{
bool oldState = Enabled;
Enabled = false;
base.Text = value;
Enabled = oldState;
}
}
}
ユーザーがリストから「パイロット名」を選択した場合、テキスト ボックスを「パイロット名」に設定します。これにより、リスト ボックスで「パイロット名」が選択されます。したがって、選択は維持する必要があります。再帰を中断する必要があるだけです。
所属していません StackOverflow