0

再会!

我有这个问题,文本框中的每个文本更改,datagriview 中的选定项目都应该复制它的值。我有这段代码,但是当我在文本框中输入(比如非常快)时它会滞后。

有没有更好的方法来做到这一点而没有滞后?

请帮忙...

这是我到目前为止所拥有的:

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

2 回答 2

3

您可能需要限制处理的事件数量。您的要求是否允许您改用TextBox ValidatedorLostFocus事件?

如果不是,您可以查看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 回答