m0_59342845 2023-09-19 08:45 采纳率: 81%
浏览 5
已结题

datagridview按钮列点动问题

winform中datagridview设置了按钮列,想要在JOG中实现点动操作,即长按“-”实现反转,抬起停止;长按“+”实现正转,抬起停止。网上查了一下datagridview貌似只能实现点击事件,点动是不是不能在这里面实现。

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-19 10:28
    关注

    【以下回答由 GPT 生成】

    我可以为您提供一个实现点动操作的解决方案。在Winform中,我们可以通过处理鼠标按下和抬起事件来模拟点动操作。

    首先,您需要在datagridview中创建一个按钮列,并为每个按钮添加鼠标按下和抬起事件处理程序。

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        // 检查点击的是否是要处理的按钮列
        if (dataGridView1.Columns[e.ColumnIndex] is DataGridViewButtonColumn &&
            e.RowIndex >= 0)
        {
            // 获取点击的按钮单元格
            DataGridViewButtonCell buttonCell =
                (DataGridViewButtonCell)dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
    
            // 根据按钮的Tag属性进行处理
            if (buttonCell.Tag.Equals("+"))
            {
                // 按下"+"
                // TODO: 实现正转逻辑
            }
            else if (buttonCell.Tag.Equals("-"))
            {
                // 按下"-"
                // TODO: 实现反转逻辑
            }
        }
    }
    

    在这个示例中,我们通过检查点击的按钮单元格的Tag属性来判断是执行正转还是反转逻辑。注意,这里使用了datagridview的CellContentClick事件,因为datagridview的CellClick事件无法处理按钮单元格的点击事件。

    然后,您需要处理鼠标按下和抬起事件,以实现点动操作。您可以在按钮按下时启动一个定时器,并在按钮抬起时停止定时器。

    private Timer timer;
    private bool isMouseDown;
    
    private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        // 检查点击的是否是要处理的按钮列
        if (dataGridView1.Columns[e.ColumnIndex] is DataGridViewButtonColumn &&
            e.RowIndex >= 0)
        {
            isMouseDown = true;
    
            // 创建定时器并启动
            timer = new Timer();
            timer.Interval = 100; // 延迟100毫秒触发一次Tick事件
            timer.Tick += Timer_Tick;
            timer.Start();
        }
    }
    
    private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (isMouseDown)
        {
            isMouseDown = false;
    
            // 停止定时器
            timer.Stop();
            timer.Dispose();
        }
    }
    
    private void Timer_Tick(object sender, EventArgs e)
    {
        // TODO: 根据当前按钮执行相应的点动操作
    }
    

    在这个示例中,我们使用了datagridview的CellMouseDown和CellMouseUp事件来处理鼠标按下和抬起事件。当按钮按下时,我们创建一个定时器并启动,定时器的Tick事件用于实现点动操作。当按钮抬起时,我们停止定时器。

    请您注意,您仍然需要实现点动操作的具体逻辑,这部分代码在上述示例中用TODO标记。这部分逻辑根据实际需求进行编写。

    希望这个解决方案能帮助到您。如果您有任何其他问题,请随时提问。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月27日
  • 已采纳回答 10月19日
  • 创建了问题 9月19日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表