DataGridViewRowContextMenuStripNeededEventHandler 委托

定义

表示将用来处理 RowContextMenuStripNeededDataGridView 事件的方法。

public delegate void DataGridViewRowContextMenuStripNeededEventHandler(System::Object ^ sender, DataGridViewRowContextMenuStripNeededEventArgs ^ e);
public delegate void DataGridViewRowContextMenuStripNeededEventHandler(object sender, DataGridViewRowContextMenuStripNeededEventArgs e);
public delegate void DataGridViewRowContextMenuStripNeededEventHandler(object? sender, DataGridViewRowContextMenuStripNeededEventArgs e);
type DataGridViewRowContextMenuStripNeededEventHandler = delegate of obj * DataGridViewRowContextMenuStripNeededEventArgs -> unit
Public Delegate Sub DataGridViewRowContextMenuStripNeededEventHandler(sender As Object, e As DataGridViewRowContextMenuStripNeededEventArgs)

参数

sender
Object

事件源。

示例

在下面的代码示例中 RowContextMenuStripNeeded ,处理 事件以基于员工的职务提供 ContextMenuStrip 。 在此示例中,有两个上下文菜单,一个用于经理,另一个用于所有其他员工。

void dataGridView1_RowContextMenuStripNeeded(object sender,
    DataGridViewRowContextMenuStripNeededEventArgs e)
{
    DataGridViewRow dataGridViewRow1 = dataGridView1.Rows[e.RowIndex];

    toolStripMenuItem1.Enabled = true;

    // Show the appropriate ContextMenuStrip based on the employees title.
    if ((dataGridViewRow1.Cells["Title"].Value.ToString() ==
        "Sales Manager") ||
        (dataGridViewRow1.Cells["Title"].Value.ToString() ==
        "Vice President, Sales"))
    {
        e.ContextMenuStrip = managerMenuStrip;
    }
    else
    {
        e.ContextMenuStrip = employeeMenuStrip;
    }

    contextMenuRowIndex = e.RowIndex;
}
Public Sub dataGridView1_RowContextMenuStripNeeded( _
    ByVal sender As Object, _
    ByVal e As DataGridViewRowContextMenuStripNeededEventArgs) _
    Handles dataGridView1.RowContextMenuStripNeeded

    Dim dataGridViewRow1 As DataGridViewRow = _
    dataGridView1.Rows(e.RowIndex)

    toolStripMenuItem1.Enabled = True

    ' Show the appropriate ContextMenuStrip based on the employees title.
    If dataGridViewRow1.Cells("Title").Value.ToString() = _
        "Sales Manager" OrElse _
        dataGridViewRow1.Cells("Title").Value.ToString() = _
        "Vice President, Sales" Then

        e.ContextMenuStrip = managerMenuStrip
    Else
        e.ContextMenuStrip = employeeMenuStrip
    End If

    contextMenuRowIndex = e.RowIndex
End Sub

注解

RowContextMenuStripNeeded仅当设置了控件DataSource属性或其 VirtualMode 属性为 trueDataGridView,才会发生该事件。 如果要显示由行的 RowContextMenuStripNeeded 当前状态或其包含的值确定的快捷菜单,处理事件非常有用。

处理 RowContextMenuStripNeeded 事件时,每当用户右键单击某一行时,都将显示处理程序中指定的快捷菜单, CellContextMenuStripNeeded 除非 覆盖所单击的特定单元格的快捷菜单。

RowContextMenuStripNeeded每当以编程方式或用户右键单击行时检索属性的值DataGridViewRow.ContextMenuStrip时,也会发生 该事件。

可以使用 DataGridViewRowContextMenuStripNeededEventArgs.RowIndex 属性来确定行的状态或其包含的值,并使用此信息更改或修改属性 DataGridViewRowContextMenuStripNeededEventArgs.ContextMenuStrip 。 此属性使用事件值替代的行 ContextMenuStrip 属性的值初始化。

RowContextMenuStripNeeded处理大量数据时处理 事件,以避免为多行设置行ContextMenuStrip值而造成性能损失。 有关详细信息,请参阅 缩放 Windows 窗体 DataGridView 控件的最佳做法

有关如何处理事件的详细信息,请参阅 处理和引发事件

创建 DataGridViewRowContextMenuStripNeededEventHandler 委托时,需要标识将处理该事件的方法。 若要将事件与事件处理程序关联,请将该委托的一个实例添加到事件中。 除非移除了该委托,否则每当发生该事件时就会调用事件处理程序。 有关事件处理程序委托的详细信息,请参阅 处理和引发事件

扩展方法

GetMethodInfo(Delegate)

获取指示指定委托表示的方法的对象。

适用于

另请参阅