legongju.com
我们一直在努力
2025-01-07 07:27 | 星期二

如何在C#中自定义DataGridView多选

在C#中,要实现自定义的DataGridView多选功能,你需要创建一个自定义的DataGridView控件,并重写其行为

  1. 首先,创建一个新的C#项目,并添加一个新的用户控件(User Control)。
  2. 在用户控件上添加一个DataGridView控件,并设置其属性,例如列和数据源等。
  3. 为用户控件添加一个新的事件,例如SelectedRowsChanged,以便在选择的行发生变化时通知其他控件。
  4. 重写DataGridView的鼠标点击和键盘事件处理程序,以便在单击或按下Shift或Ctrl键时进行多选。

以下是一个简单的示例:

using System;
using System.Windows.Forms;

public partial class CustomDataGridView : UserControl
{
    public event EventHandler SelectedRowsChanged;

    public CustomDataGridView()
    {
        InitializeComponent();

        dataGridView1.CellMouseDown += DataGridView1_CellMouseDown;
        dataGridView1.KeyDown += DataGridView1_KeyDown;
    }

    private void DataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left && e.RowIndex >= 0)
        {
            if (ModifierKeys == Keys.Shift)
            {
                // 使用Shift键进行多选
                int lastSelectedRowIndex = dataGridView1.CurrentCell.RowIndex;
                int currentRowIndex = e.RowIndex;

                for (int i = Math.Min(lastSelectedRowIndex, currentRowIndex); i <= Math.Max(lastSelectedRowIndex, currentRowIndex); i++)
                {
                    dataGridView1.Rows[i].Selected = true;
                }
            }
            else if (ModifierKeys == Keys.Control)
            {
                // 使用Ctrl键进行多选
                dataGridView1.Rows[e.RowIndex].Selected = !dataGridView1.Rows[e.RowIndex].Selected;
            }
            else
            {
                // 正常单选
                dataGridView1.ClearSelection();
                dataGridView1.Rows[e.RowIndex].Selected = true;
            }

            SelectedRowsChanged?.Invoke(this, EventArgs.Empty);
        }
    }

    private void DataGridView1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)
        {
            int selectedRowIndex = dataGridView1.CurrentCell.RowIndex;
            int newRowIndex = e.KeyCode == Keys.Up ? selectedRowIndex - 1 : selectedRowIndex + 1;

            if (newRowIndex >= 0 && newRowIndex< dataGridView1.Rows.Count)
            {
                if (ModifierKeys == Keys.Shift)
                {
                    // 使用Shift键进行多选
                    for (int i = Math.Min(selectedRowIndex, newRowIndex); i <= Math.Max(selectedRowIndex, newRowIndex); i++)
                    {
                        dataGridView1.Rows[i].Selected = true;
                    }
                }
                else if (ModifierKeys == Keys.Control)
                {
                    // 使用Ctrl键进行多选
                    dataGridView1.Rows[newRowIndex].Selected = !dataGridView1.Rows[newRowIndex].Selected;
                }
                else
                {
                    // 正常单选
                    dataGridView1.ClearSelection();
                    dataGridView1.Rows[newRowIndex].Selected = true;
                }

                SelectedRowsChanged?.Invoke(this, EventArgs.Empty);
            }
        }
    }
}

现在,你可以在你的主窗体或其他控件中使用这个自定义的DataGridView,并处理SelectedRowsChanged事件以获取选定的行。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/87355.html

相关推荐

  • 在C#中如何处理配置文件的变更

    在C#中如何处理配置文件的变更

    在C#中,处理配置文件(如App.config或Web.config)的变更通常涉及以下几个步骤: 添加配置文件 首先,确保你的项目中有一个配置文件。对于控制台应用程序或Wind...

  • C#中配置文件的加载顺序是怎样的

    C#中配置文件的加载顺序是怎样的

    在C#中,配置文件主要包括App.config和Web.config。它们的加载顺序如下: 当应用程序启动时,.NET运行时会首先查找并加载App.config或Web.config文件。这取决于你...

  • 如何确保C#配置的安全性

    如何确保C#配置的安全性

    要确保C#配置的安全性,请遵循以下最佳实践: 使用安全编码实践:遵循安全编码原则,例如输入验证、错误处理和日志记录等。这有助于确保代码不会引入潜在的安全漏...

  • C#中如何使用自定义配置节

    C#中如何使用自定义配置节

    在C#中,您可以通过创建自定义配置节来组织和管理应用程序的配置信息 首先,在项目中添加对System.Configuration的引用。 接下来,创建一个新的类,该类将表示自...

  • 在C#中怎样控制PictureBox的缩放范围

    在C#中怎样控制PictureBox的缩放范围

    在C#中,要控制PictureBox的缩放范围,可以使用PictureBox控件的SizeMode属性和Size属性 首先,将PictureBox控件添加到窗体上。
    设置PictureBox控件的SizeM...

  • C# PictureBox缩放时如何处理边界情况

    C# PictureBox缩放时如何处理边界情况

    在C#中,使用PictureBox控件时,可能需要处理缩放和边界情况。以下是一些建议: 设置SizeMode属性:根据需要,可以将PictureBox的SizeMode属性设置为以下之一: ...

  • 如何在C#中实现PictureBox的平滑缩放

    如何在C#中实现PictureBox的平滑缩放

    在C#中,要实现PictureBox的平滑缩放,可以使用Graphics对象的DrawImage方法 首先,请确保已添加System.Drawing和System.Windows.Forms命名空间。 using System....

  • 怎样自定义C# PictureBox的缩放方式

    怎样自定义C# PictureBox的缩放方式

    要自定义C# PictureBox的缩放方式,可以通过创建一个自定义的PictureBox控件并重写其OnPaint方法来实现。在这个方法中,你可以使用Graphics对象的DrawImage方法,...