欢迎光临散文网 会员登陆 & 注册

C# DataGridView内自定义右键菜单

2023-03-04 01:31 作者:FFFFFourier  | 我要投稿

1. 在工具栏内找到ContextMenuStrip,拖拽到目标页面内


工具栏 ContextMenuStrip

2. 在页面内添加ContextMenuStrip包含的项目


向ContextMenuStrip内添加项目

3. 添加DataGridView的事件

我自己的需求是,右键单击表格内特定区域的单元格,在相应的位置弹出右键菜单列表。但是,DataGridView默认只支持鼠标左键单键选择行或选择单元格,所以需要在DataGridView的事件函数里自定义鼠标的行为。其次,最好不要在DataGridView的属性里面直接绑定ContextMenuStrip,如下图

最好不要在DataGridView的属性里面绑定ContextMenuStrip

因为一旦在这里绑定,那么任何情况下只要鼠标在DataGridView区域内右键单击,都会弹出菜单!(如果期望的效果本来就是这样的话,忽略上述内容)

为了实现在指定单元格右键时弹出菜单,需要自己定义事件函数,直接贴代码。

private void dgv_logs_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)

        {

            if (e.Button == MouseButtons.Right && e.RowIndex >= 0)

            {

                dgv_logs.ClearSelection();

                dgv_logs.CurrentCell = null;

                dgv_logs.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected = true;

                if (e.ColumnIndex > 4)

                    dgv_logs.ContextMenuStrip = contextMenuStrip_logs;

                else

                    dgv_logs.ContextMenuStrip = null;

            }

        }


        private void dgv_logs_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)

        {

            if (e.Button == MouseButtons.Right && e.RowIndex >= 0 && e.ColumnIndex > 4)

            {

                contextMenuStrip_logs.Show(MousePosition.X, MousePosition.Y);

                dgv_logs.ContextMenuStrip = null;

            }

        }


        private void ToolStripMenuItem_logs_openInExplore_Click(object sender, EventArgs e)

        {

            int RowIndex = dgv_logs.CurrentCell.RowIndex;

            int ColIndex = dgv_logs.CurrentCell.ColumnIndex;

            MessageBox.Show(RowIndex.ToString() + ColIndex.ToString());

        }

4. 实现效果

右键单击指定区域单元格
MessageBox提示该单元格的行列号


C# DataGridView内自定义右键菜单的评论 (共 条)

分享到微博请遵守国家法律