【在线求助】DataGridView列头问题????【请大家帮忙】 想在DataGridView的列头绑定一个contextMenuStrip控件功能:只能在选中列头时单击右键才会出现contextMenuStrip控件,其他位置不出现请大家帮忙!!!怎么来实现??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以在选中事件里动态添加contextMenuStrip控件好像是那个事件的if(e.rowindex<0)时触发。因为列头和行头的坐标都是-1 DataGridView 的右键菜单(ContextMenuStrip)DataGridView,DataGridViewColumn, DataGridViewRow, DataGridViewCell 有 ContextMenuStrip 属性。可以通过设定 ContextMenuStrip 对象来控制 DataGridView 的右键菜单的显示。 DataGridViewColumn 的 ContextMenuStrip 属性设定了 除了列头以外的单元格的右键菜单。 DataGridViewRow 的 ContextMenuStrip 属性设定了除了行头以外的单元格的右键菜单。DataGridViewCell 的 ContextMenuStrip 属性设定了指定单元格的右键菜单。 [VB.NET] ' DataGridView 的 ContextMenuStrip 设定 DataGridView1.ContextMenuStrip = Me.ContextMenuStrip1 ' 列的 ContextMenuStrip 设定 DataGridView1.Columns(0).ContextMenuStrip = Me.ContextMenuStrip2 ' 列头的 ContextMenuStrip 设定 DataGridView1.Columns(0).HeaderCell.ContextMenuStrip = Me.ContextMenuStrip2 ' 行的 ContextMenuStrip 设定 DataGridView1.Rows(0).ContextMenuStrip = Me.ContextMenuStrip3 ' 单元格的 ContextMenuStrip 设定 DataGridView1(0, 0).ContextMenuStrip = Me.ContextMenuStrip4 利用 CellContextMenuStripNeeded 事件可以设定单元格的右键菜单,尤其但需要右键菜单根据单元格值的变化而变化的时候。比起使用循环遍历,使用该事件来设定右键菜单的效率更高。但是,在DataGridView使用了DataSource绑定而且是VirtualMode的时候,该事件将不被引发。 [VB.NET] ' CellContextMenuStripNeeded事件处理方法 Private Sub DataGridView1_CellContextMenuStripNeeded( _ ByVal sender As Object, _ ByVal e As DataGridViewCellContextMenuStripNeededEventArgs) _ Handles DataGridView1.CellContextMenuStripNeeded Dim dgv As DataGridView = CType(sender, DataGridView) If e.RowIndex < 0 Then ' 列头的ContextMenuStrip设定 e.ContextMenuStrip = Me.ContextMenuStrip1 ElseIf e.ColumnIndex < 0 Then ' 行头的ContextMenuStrip设定 e.ContextMenuStrip = Me.ContextMenuStrip2 ElseIf TypeOf (dgv(e.ColumnIndex, e.RowIndex).Value) Is Integer Then ' 如果单元格值是整数时 e.ContextMenuStrip = Me.ContextMenuStrip3 End If End Sub 同样,可以通过 RowContextMenuStripNeeded 事件来设定行的右键菜单。 [VB.NET] ' RowContextMenuStripNeeded事件处理方法 Private Sub DataGridView1_RowContextMenuStripNeeded( _ ByVal sender As Object, _ ByVal e As DataGridViewRowContextMenuStripNeededEventArgs) _ Handles DataGridView1.RowContextMenuStripNeeded Dim dgv As DataGridView = CType(sender, DataGridView) ' 当"Column1"列是Bool型且为True时、设定其的ContextMenuStrip Dim boolVal As bject = dgv("Column1", e.RowIndex).Value Console.WriteLine(boolVal) If TypeOf boolVal Is Boolean AndAlso CBool(boolVal) Then e.ContextMenuStrip = Me.ContextMenuStrip1 End If End Sub CellContextMenuStripNeeded 事件处理方法的参数中、「e.ColumnIndex=-1」表示行头、「e.RowIndex =-1」表示列头。RowContextMenuStripNeeded则不存在「e.RowIndex=-1」的情况。 RowContextMenuStripNeededCellContextMenuStripNeeded 这个不好弄好像。估计要判断鼠标右键点击的区域是否在datagridview的列头区域内。 private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) {if (e.Button == MouseButtons.Right) { Point p= dataGridView1.PointToClient(Cursor.Position); this.contextMenuStrip1.Show(dataGridView1, p); } } wpf 网线拔掉之后,程序跑三个多小时后退出去了 请问,这个倒计时钟怎么写? GDI+缩放后的滚动条查看失效 用C#编写记事本的话是在编辑器中挨行敲吗 大家帮我看看这样的存储过程怎么写?? (缥缈孤风)大侠请进!数据到更新问题 .net下开发GIS程序用什么比较好? 网站访问慢 问题没人答 散分 再也不来了 C#有没有办法用编程的方法删除面板上的按钮之类的东西 100分儿请教几个特简单的c#问题 c# 中关于正则表达式 求救!!程序重启自启动后功能丢失了!!!!
好像是那个事件的
if(e.rowindex<0)时触发。
因为列头和行头的坐标都是-1
DataGridView 的右键菜单(ContextMenuStrip)
DataGridView,
DataGridViewColumn,
DataGridViewRow,
DataGridViewCell 有 ContextMenuStrip 属性。可以通过设定 ContextMenuStrip 对象来控制 DataGridView 的右键菜单的显示。
DataGridViewColumn 的 ContextMenuStrip 属性设定了 除了列头以外的单元格的右键菜单。 DataGridViewRow 的 ContextMenuStrip 属性设定了除了行头以外的单元格的右键菜单。DataGridViewCell 的 ContextMenuStrip 属性设定了指定单元格的右键菜单。 [VB.NET] ' DataGridView 的 ContextMenuStrip 设定 DataGridView1.ContextMenuStrip = Me.ContextMenuStrip1 ' 列的 ContextMenuStrip
设定 DataGridView1.Columns(0).ContextMenuStrip = Me.ContextMenuStrip2 ' 列头的 ContextMenuStrip
设定 DataGridView1.Columns(0).HeaderCell.ContextMenuStrip = Me.ContextMenuStrip2 ' 行的 ContextMenuStrip 设定 DataGridView1.Rows(0).ContextMenuStrip = Me.ContextMenuStrip3 ' 单元格的 ContextMenuStrip
设定 DataGridView1(0, 0).ContextMenuStrip = Me.ContextMenuStrip4
利用 CellContextMenuStripNeeded 事件可以设定单元格的右键菜单,尤其但需要右键菜单根据单元格值的变化而变化的时候。比起使用循环遍历,使用该事件来设定右键菜单的效率更高。但是,在DataGridView使用了DataSource绑定而且是VirtualMode的时候,该事件将不被引发。 [VB.NET] ' CellContextMenuStripNeeded事件处理方法 Private Sub DataGridView1_CellContextMenuStripNeeded( _ ByVal sender As Object, _ ByVal e As DataGridViewCellContextMenuStripNeededEventArgs) _ Handles DataGridView1.CellContextMenuStripNeeded Dim dgv As DataGridView = CType(sender, DataGridView) If e.RowIndex < 0 Then ' 列头的ContextMenuStrip设定 e.ContextMenuStrip = Me.ContextMenuStrip1 ElseIf e.ColumnIndex < 0 Then ' 行头的ContextMenuStrip设定 e.ContextMenuStrip = Me.ContextMenuStrip2 ElseIf TypeOf (dgv(e.ColumnIndex, e.RowIndex).Value) Is Integer Then ' 如果单元格值是整数时 e.ContextMenuStrip = Me.ContextMenuStrip3 End If End Sub 同样,可以通过 RowContextMenuStripNeeded 事件来设定行的右键菜单。 [VB.NET] ' RowContextMenuStripNeeded事件处理方法 Private Sub DataGridView1_RowContextMenuStripNeeded( _ ByVal sender As Object, _ ByVal e As DataGridViewRowContextMenuStripNeededEventArgs) _ Handles DataGridView1.RowContextMenuStripNeeded Dim dgv As DataGridView = CType(sender, DataGridView) ' 当"Column1"列是Bool型且为True时、设定其的ContextMenuStrip Dim boolVal As bject = dgv("Column1", e.RowIndex).Value Console.WriteLine(boolVal) If TypeOf boolVal Is Boolean AndAlso CBool(boolVal) Then e.ContextMenuStrip = Me.ContextMenuStrip1 End If End Sub CellContextMenuStripNeeded 事件处理方法的参数中、「e.ColumnIndex=-1」表示行头、「e.RowIndex =-1」表示列头。RowContextMenuStripNeeded则不存在「e.RowIndex=-1」的情况。
CellContextMenuStripNeeded
估计要判断鼠标右键点击的区域是否在datagridview的列头区域内。
{if (e.Button == MouseButtons.Right)
{
Point p= dataGridView1.PointToClient(Cursor.Position);
this.contextMenuStrip1.Show(dataGridView1, p);
}
}