首页蓝耳朵|小小蓝耳朵广州图书馆外文室英语儿童读物资源介绍网佛教青年之友旧版收集永硕E盘Phonics Short Vowels Game 
给DataGridView或TreeView的添加右键菜单
所属栏目:winform  时间:2013-08-07 08:26  作者:狼子

一般实现右键菜单,只需要在窗体上加一个ContextMenuStrip控件,再设置需要右键菜单的控件的ContextMenuStrip属性,就可以自动实现右键菜单了,鼠标在哪儿点,菜单在哪儿显示

就是,如果是在DataGridView上点右键,出来的菜单如果是和行有关系的,比如修改当前行的数据、删除当前行。。。那就不可以用这个方法了

因为只要设置了DataGridView的ContextMenuStrip属性,DataGridView的CellMouseDown和CellMouseClick事件就只响应左键,不响应右键,导致不能通过CellMouseDown或CellMouseClick事件获取鼠标右击时的行号

当右键出来的菜单和DataGridView的行有关时,同样要添加ContextMenuStrip控件,但不需要设置ContextMenuStrip属性,添加CellMouseClick事件,代码如下:

private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right && e.RowIndex > -1)
            {
                dataGridView1.ClearSelection();
                dataGridView1.Rows[e.RowIndex].Selected = true;
                contextMenuStrip1.Show(MousePosition.X, MousePosition.Y);
            }
        }
即:先清空当前的选中行,再获取当前行号,设置当前行的是选中状态,在鼠标点击的位置显示菜单
 
-----------------------------------------------
 
给TreeView控件添加右键菜单时,是在NodeMouseClick事件中判断节点,所以没有这种情况,可以直接设置ContextMenuStrip属性添加右键菜单
 
就是,我还是喜欢不设置ContextMenuStrip属性,然后在NodeMouseClick事件里在鼠标点击的地方显示菜单,因为这样可以避免在TreeView空白的地方点右键时,没有节点被选中,还是一样显示菜单的问题,有时候TreeView会很高,就是节点只有几个,下面会有比较大的地方是空白,在那一片空白里,我不想显示右键菜单,如果是通过设置ContextMenuStrip属性的,避免不开这个
 
所以我还是选择不设置ContextMenuStrip属性,自己在NodeMouseClick事件里设置当前节点是选中节点,然后显示菜单,代码如下:
 
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                treeView1.SelectedNode = e.Node;
                contextMenuStrip1.Show(MousePosition.X, MousePosition.Y);
            }
        }

 

小楼宝宝的涂鸦花花(Imitater)的博客起名称骨测字皖ICP备06000023号-17