C# DataGridView,右键单击RowHeader时显示右键菜单怎么做?我不是要把右键菜单加到全部的DataGridView .. 只有选 择了行头的时候,才加。。
或者 是怎么判断鼠标点击的是行头。。
private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
        {
             
            DataGridView myGrid  = sender as DataGridView;
                
            System.Windows.Forms.DataGridView.HitTestInfo hti;
            hti = myGrid.HitTest(e.Location.X, e.Location.Y);
           
            if( hti.Type == DataGridViewHitTestType.RowHeader )
            {  
               
            }
     
              
        }
以上的代码 。。不管是点击 的行头,,还是单元格。。hti.Type 一直都是TopLeftHeader求解答

解决方案 »

  1.   


            private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                if( e.ColumnIndex==-1)
                {
                    MessageBox.Show("这里是行头");
                }
            }
      

  2.   


    把右键菜单与datagridview绑定,右键时判断是否行头,如果是行头show
      

  3.   

    有直接的事件!:        private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
            {
                if(e.Button==MouseButtons.Right)
                {
                    //加入显示右键弹出菜单
                }
            }
      

  4.   

    可以肯定,楼上的代码都未经测试。注意:楼主要的是在行头,就是标题行上点击右键,出现快捷菜单。
    而且,CellClick 是不响应右键的,所以,只有在 CellMouseClick 事件中才能响应右键.(RowHeaderMouseClick 也有响应,但是不知道为什么,我的 VS2005 没有反应,所以不推荐使用)
    private void dgv_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
            {
                // 判断是否右键点击
                if (e.Button == MouseButtons.Right)
                {
                    // 得到点击所在的行和列信息。相关函数查 MSDN
                    DataGridView.HitTestInfo hitinfo = dgv_verify.HitTest(e.X, e.Y);
                    // 如果 RowIndex < 0,就是标题行了。 
                    if (hitinfo.RowIndex < 0)
                    {
                        // 如果你只要指定的列显示菜单,则加入对 hitinfo.ColumnIndex 的判断
                        contextMenuStrip1.Show(MousePosition.X, MousePosition.Y);
                    }
                }
            }===============================================================
    以上代码经过测试,在 VS2005 和 VS2008 下运行正常。
    有什么问题,再问我吧。
      

  5.   

    楼上,真是服了你!既然你“RowHeaderMouseClick 也有响应,但是不知道为什么,我的 VS2005 没有反应”
    ,怎么还那么肯定别人代码都未经测试!不是前后矛盾吗?!!
    你的代码没有响应:要么是给datagridview的ContextMenu 手工设置了上下文菜单,
    要么给FormContextMenu 手工设置了上下文菜单!你把这个属性去掉试试,会不会响应代码!
    下次说话,不要说的这么满!
      

  6.   

    使用 CellContextMenuStripNeeded 事件:private void dataGridView1_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e)
            {
                if (e.ColumnIndex == -1)
                {
                    e.ContextMenuStrip = contextMenuStrip1;
                }
            }
      

  7.   

    刚才遇到这个问题,给你个答案。4楼没分清rowheader和columheader private void datagridview1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
            {            if (e.Button == System.Windows.Forms.MouseButtons.Right)
                {
                    int x = e.Location.X;
                    int y = e.Location.Y;
                    for (int i = 0; i < e.ColumnIndex; i++)
                        x += this.Columns[i].Width;                headercontextMenuStrip.Show(this, x, y);
                }
            }