0

良い一日!

テキストボックス内のすべてのテキストの変更、datagriview 内の選択されたアイテムはその値をコピーする必要があるというこの問題があります。私はこのコードを持っていますが、テキストボックスに(非常に速く)入力すると遅れます。

遅延なしでこれを行うより良い方法はありますか?

助けてください...

これが私がこれまでに持っているものです:

private void txtText_TextChanged(object sender, EventArgs e)
    {
        DataGridView1[2, pos].Value = txtText.Text;
    }
4

2 に答える 2

3

処理されるイベントの数を制限する必要がある場合があります。TextBox ValidatedまたはLostFocusイベントを代わりに使用できる要件はありますか?

そうでない場合は、Rxを調べてTextChangedイベントを調整できます。これは次のように実現できます。

IObservable<EventPattern<EventArgs>> observable = Observable.FromEventPattern(
  txtText, "TextChanged").Throttle(TimeSpan.FromMilliseconds(500))
  .Subscribe(ep=> DataGridView1[2, pos].Value = txtText.Text;);

でスロットルすることもできますTimer

Timer myTimer = new Timer();
myTimer.Interval = 500;
myTimer.Tick = OnTimerTick;

private void OnTimerTick(object o, EventArgs e)
{
  myTimer.Stop();
  DataGridView1[2, pos].Value = txtText.Text;
}

private void txtText_TextChanged(object sender, EventArgs e)
{
   if(!myTimer.Enabled) myTimer.Start();
}
于 2013-07-01T02:49:41.773 に答える
0

txtText_KeyPressイベントを使用して、ユーザーがenterキー (キー コード = 13) を押したかどうかを確認できます。

于 2013-07-01T02:37:17.360 に答える