zoukankan      html  css  js  c++  java
  • 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
     
    [C#]
    // DataGridView ContextMenuStrip 设定
    DataGridView1.ContextMenuStrip = this.ContextMenuStrip1;

    // 列的 ContextMenuStrip 设定
    DataGridView1.Columns[0].ContextMenuStrip = this.ContextMenuStrip2;
    // 列头的 ContextMenuStrip 设定
    DataGridView1.Columns[0].HeaderCell.ContextMenuStrip = this.ContextMenuStrip2;

    // 行的 ContextMenuStrip 设定
    DataGridView1.Rows[0].ContextMenuStrip = this.ContextMenuStrip3;

    // 单元格的 ContextMenuStrip 设定
    DataGridView1[0, 0].ContextMenuStrip = this.ContextMenuStrip4;
    对于单元格上的右键菜单的设定,优先顺序是: Cell > Row > Column > DataGridView
    CellContextMenuStripNeededRowContextMenuStripNeeded 事件
    利用 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
     
    [C#]
    // CellContextMenuStripNeeded事件处理方法
    private void DataGridView1_CellContextMenuStripNeeded(object sender,
        DataGridViewCellContextMenuStripNeededEventArgs e)
    {
        DataGridView dgv = (DataGridView)sender;
        
    if (e.RowIndex < 0)
        {
            
    // 列头的ContextMenuStrip设定
            e.ContextMenuStrip = this.ContextMenuStrip1;
        }
        
    else if (e.ColumnIndex < 0)
        {
            
    // 行头的ContextMenuStrip设定
            e.ContextMenuStrip = this.ContextMenuStrip2;
        }
        
    else if (dgv[e.ColumnIndex, e.RowIndex].Value is int)
        {
            
    // 如果单元格值是整数时
            e.ContextMenuStrip = this.ContextMenuStrip3;
        }
    }
    同样,可以通过 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 Object = 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
     
    [C#]
    // RowContextMenuStripNeeded事件处理方法
    private void DataGridView1_RowContextMenuStripNeeded(object sender,
        DataGridViewRowContextMenuStripNeededEventArgs e)
    {
        DataGridView dgv = (DataGridView)sender;
        
    // 当"Column1"列是Bool型且为True时、设定其的ContextMenuStrip
        object boolVal = dgv["Column1", e.RowIndex].Value;
        Console.WriteLine(boolVal);
        
    if (boolVal is bool && (bool)boolVal)
        {
            e.ContextMenuStrip = 
    this.ContextMenuStrip1;
        }
    }

    CellContextMenuStripNeeded
     事件处理方法的参数中、「e.ColumnIndex=-1」表示行头、「e.RowIndex=-1」表示列头。RowContextMenuStripNeeded则不存在「e.RowIndex=-1」的情况。
    本文出自 51CTO.COM技术博客
  • 相关阅读:
    linux进程管理
    使用PL/SQL Developer 学习pl/sql
    Linux入门到放弃之一《在VMware虚拟机中安装Linux系统(RedHat)》
    解决Java连接Oracle 12c存在的问题
    Linux安装64位Mysql5.7.22
    在centos下启动nginx出现Failed to start nginx.service:unit not found
    windows10下IntelliJ IDEA使用logback设置日志输出目录
    Windows下mysql5.6升级到5.7的方法
    Spring+Hibernate+Struts2整合之实现登录功能
    Hibernate关系映射之many-to-many(多对多)
  • 原文地址:https://www.cnblogs.com/zjoch/p/1745657.html
Copyright © 2011-2022 走看看