鼠标右键菜单

哎呦,折腾了好长时间啊,终于弄出来了!
最简单的方法,使用ContexMenuStrip控件,编辑好菜单后,直接在需要显示右键菜单的控件上设置ContextMenuStrip属性,然后就可以了!
但是我是要在datagridview所在列上使用右键菜单,如果绑定的话很显然是行不通的了,因为它会在控件上任何你点击的地方显示,可能是今天有点累,居然犯了点迷糊,花了那么长时间!
我现在就把我实现的功能和代码给写出来,希望能给需要的朋友带来方便,
不过呢,我现在还是一学生,如有高见请指教!

实现菜单跟随鼠标显示,并设置右键点击行为选中行:  

         private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {             
                dataGridView1.Rows[e.RowIndex].Selected =true;

                menu_evalue.Show( MousePosition.X, MousePosition.Y);
            
}
       }
说明:采用事件,CellMouseClick,在使用时需要设置选择为整行,即设置其selectionMode属性为fullRowSelect,不能使用e.x和e.y否则会右键菜单是出现在屏幕的左上角,而不是鼠标的旁边,也不能用menu_evalue.Show( dataGridView1,MousePosition.X, MousePosition.Y);这样也不是跟随的。

 编程最忌一 根筋啊!(或许是不求甚解吧,不过这个问题肯定有好的解决方法,如果你知道解决方法一定要告诉我啊!!)
在开始时呢,我把dataGridView1_SelectionChanged(object sender, EventArgs e)事件单独写出来,这样就出现了一个问题那就是在 dataGridView1.DataSource =  ds_evalue.Tables[0];报错了,index错误,很是奇怪,后来调试发现,在dataGridView1.DataSource =  ds_evalue.Tables[0];会激发dataGridView1_SelectionChanged(object sender, EventArgs e)事件,就在这报错了,因为他不止调用一次该事件!折腾了好一会也没解决,其实这完全可以用2个事件代替,因为我可以在鼠标左右单击事件中写那个本来改该在
SelectionChanged事件中的事件!

问题是这样SelectionChanged不就基本 没用了吗,有会的一定要告诉我啊!!

嘿嘿,我发现了解决方法,在SelectionChanged事件中加一个判定就可以了,if (dataGridView1.SelectedRows.Count == 1)这样就可以防止出现索引错误了!!!

你可能感兴趣的:(右键菜单)