You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataGridView鼠标滚轮触发SendKeys上下键问题及代码咨询

解决DataGridView鼠标滚轮触发UP/DOWN按键的问题

针对你遇到的需要将DataGridView鼠标滚轮操作映射为上下方向键的需求,下面是完整的实现方案和代码整理:

1. 自定义DataGridView子类重写MouseWheel事件

首先我们创建一个继承自DataGridView的子类,重写它的MouseWheel事件来捕获滚轮动作,并模拟发送UP/DOWN按键:

public class CustomDataGridView : DataGridView
{
    protected override void OnMouseWheel(MouseEventArgs e)
    {
        // 可选:如果不需要DataGridView默认的滚轮行滚动行为,就注释掉下面这行
        // base.OnMouseWheel(e);

        // 根据滚轮滚动方向判断发送哪个按键
        if (e.Delta > 0)
        {
            // 滚轮向上滚动,发送UP方向键
            SendKeys.Send("{UP}");
        }
        else
        {
            // 滚轮向下滚动,发送DOWN方向键
            SendKeys.Send("{DOWN}");
        }
    }
}

关键点说明:

  • e.Delta值用来判断滚轮方向:正数表示向上滚动,负数表示向下滚动。
  • 如果希望同时保留DataGridView默认的滚轮行滚动+模拟按键,就不要注释base.OnMouseWheel(e);如果只需要模拟按键效果,就注释掉这一行。
  • 若出现按键不生效的情况,可以替换为SendKeys.SendWait("{UP}"),该方法会等待按键发送完成,避免异步问题。

2. 创建DataTable并绑定数据源的完整代码

我把你提供的按钮点击事件代码补全并规范了,下面是完整版本:

private void button1_Click(object sender, EventArgs e)
{
    DataTable myDataTable = new DataTable();
    const int NUM_ROWS = 150;
    const int NUM_COLS_TO_CREATE = 10;

    // 生成数据表列
    for (int i = 0; i < NUM_COLS_TO_CREATE; i++)
    {
        myDataTable.Columns.Add($"x{i}", typeof(string));
    }

    // 填充数据行
    for (int i = 0; i < NUM_ROWS; i++)
    {
        DataRow theRow = myDataTable.NewRow();
        // 为每一列赋值(这里用行号+列号作为示例内容)
        for (int j = 0; j < NUM_COLS_TO_CREATE; j++)
        {
            theRow[j] = $"Row {i}, Column {j}";
        }
        myDataTable.Rows.Add(theRow);
    }

    // 将数据表绑定到自定义DataGridView控件
    customDataGridView1.DataSource = myDataTable;
}

使用注意:

  • 确保你的WinForm窗体上使用的是我们自定义的CustomDataGridView控件(可以在设计器中添加,或者通过代码实例化)。
  • 操作时确保DataGridView处于焦点状态,否则SendKeys可能会发送到其他控件上。

内容的提问来源于stack exchange,提问作者Zulfakar Zukri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:35:58