c# - 有时上下键在 DataGridView 上不起作用

标签 c# winforms datagridview

有时 up down 键在 DataGridView 上不起作用。

我不知道为什么,尤其是它很奇怪,因为没有为 DataGridView 的键事件分配代码...

SelectionMode is FullRowSelect

Multiselect is False

这段代码没有帮助...

     private void dataGridView1_PreviewKeyDown(object sender, reviewKeyDownEventArgs e)
            {
                switch (e.KeyCode)
                {
                    case Keys.Down:
                        e.IsInputKey = true;
                        break;
                    case Keys.Up:
                        e.IsInputKey = true;
                        break;
                }
            }

  private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
        {

            if (e.KeyData == Keys.Down)
            {

                e.Handled = true;
            }
            else if (e.KeyData == Keys.Up)
            {

                e.Handled = true;
            }
        }

有什么线索吗?

附言

似乎 SelectionChanged 方法做了一些艰苦的工作...所以当我禁用它时,eberthing 很好。

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
    // Some hard work
}

所以问题是如何优化它。

我假设使用 Timer,所以当用户在 1 秒后停止选择箭头键时 应执行 SelectionChanged 方法的代码。

关于最好的方法有什么线索吗?

最佳答案

在执行 SelectionChanged 期间,网格以某种方式失去了焦点。 这可能是由于动态创建和插入用户控件而发生的。

所以我做了三个调整,现在好了!

 bool canDoHardWork = true;
 private void dataGridView1_SelectionChanged(object sender, EventArgs e)
        {
            if (canDoHardWork)
            {
                int interval = 2000; // Just 2 seconds
                Task.Factory.StartNew(() =>
                {
                    canDoHardWork= false;
                    Thread.Sleep(interval);
                    this.BeginInvoke((Action)(() =>
                    {                         
                        PopulateTabs(); // Very hard work
                        dataGridView1.Focus();
                        canDoHardWork= true;
                    }), null);

                });
            }
        }

关于c# - 有时上下键在 DataGridView 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35481991/

相关文章:

c# - EF没有引入UserRoles表时如何添加角色使用?

c# - 使用 dateTimePicker 在 DataGridView 中编辑日期

c# - Nancy:是否有 Server.MapPath ("~/") 等价物?

c# - 不调用 Response.Flush 仍然发送连接 : Close in the Response

c# - 为什么在调用非静态方法时会调用结构中的静态构造函数?

c# - 将 SQL 转换为 EF Linq

c# - 使用事件处理程序与覆盖事件触发方法

vb.net - 面板控件到图像

c# - 检查 dataGridView 是否为空

c# - 如何从datagridview的一列中读取数据