2

方法があります

private void textBoxPilot_TextChanged(object sender, TextChangedEventArgs e)
{ ... }

ここで、問題のテキストボックスはユーザーから検索文字列を取得し、ListBoxすべてのキーストロークの結果をに入力します。

その後、からアイテムを選んListBoxだら、その選択を同じに反映させていただきたいと思いTextboxます。ただし、検索メカニズムをトリガーしたくないのでListbox、選択を忘れてしまいます。

TextChangedイベントがユーザーによってトリガーされたのか(キーボードまたはコピー/貼り付けを介して)、または別の方法を使用してトリガーされたのかを判断するにはどうすればよいtextBoxPilot.Text = "Pilot name";ですか?

ありがとう。

4

4 に答える 4

1

ちょっとしたハックですが…。

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.
    }
}
于 2010-09-02T20:42:49.433 に答える
1

コントロールを無効にしても、イベントは発生しません。したがって、2つのオプションは、常にテキストの更新を無効にしてから再度有効にするか、派生クラスラッパーを作成することです(このメソッドを使用すると、データバインディングを実行できます)

class myClass : TextBox
{
    public virtual string TextWithoutEvents
    {
        get
        {

            return base.Text;
        }
        set
        {
            bool oldState = Enabled;
            Enabled = false;
            base.Text = value;
            Enabled = oldState;
        }
    }
}
于 2010-09-02T20:43:45.233 に答える
0

ユーザーがリストから「パイロット名」を選択した場合、テキスト ボックスを「パイロット名」に設定します。これにより、リスト ボックスで「パイロット名」が選択されます。したがって、選択を維持する必要があります。再帰を壊すだけです。

于 2010-09-02T20:41:51.663 に答える