Leer en inglés

Compartir a través de


DataGridViewCellContextMenuStripNeededEventHandler Delegado

Definición

Representa el método que controlará un evento CellContextMenuStripNeeded de un control DataGridView.

C#
public delegate void DataGridViewCellContextMenuStripNeededEventHandler(object sender, DataGridViewCellContextMenuStripNeededEventArgs e);
C#
public delegate void DataGridViewCellContextMenuStripNeededEventHandler(object? sender, DataGridViewCellContextMenuStripNeededEventArgs e);

Parámetros

sender
Object

Origen del evento.

Ejemplos

En el ejemplo de código siguiente se usa DataGridViewCellContextMenuStripNeededEventArgs para establecer el menú contextual sin compartir la fila.

C#
private ToolStripMenuItem wholeTable = new ToolStripMenuItem();
private ToolStripMenuItem lookUp = new ToolStripMenuItem();
private ContextMenuStrip strip;
private string cellErrorText;

private void dataGridView1_CellContextMenuStripNeeded(object sender,
    DataGridViewCellContextMenuStripNeededEventArgs e)
{
    cellErrorText = String.Empty;

    if (strip == null)
    {
        strip = new ContextMenuStrip();
        lookUp.Text = "Look Up";
        wholeTable.Text = "See Whole Table";
        strip.Items.Add(lookUp);
        strip.Items.Add(wholeTable);
    }
    e.ContextMenuStrip = strip;
}

private void wholeTable_Click(object sender, EventArgs e)
{
    dataGridView1.DataSource = Populate("Select * from employees", true);
}

private DataGridViewCellEventArgs theCellImHoveringOver;

private void dataGridView1_CellMouseEnter(object sender, DataGridViewCellEventArgs e)
{
    theCellImHoveringOver = e;
}

private DataGridViewCellEventArgs cellErrorLocation;

private void lookUp_Click(object sender, EventArgs e)
{
    try
    {
        dataGridView1.DataSource = Populate("Select * from employees where " +
            dataGridView1.Columns[theCellImHoveringOver.ColumnIndex].Name + " = '" +
            dataGridView1.Rows[theCellImHoveringOver.RowIndex].
            Cells[theCellImHoveringOver.ColumnIndex].Value + "'",
            true);
    }
    catch (SqlException)
    {
        cellErrorText = "Can't look this cell up";
        cellErrorLocation = theCellImHoveringOver;
    }
}

private void dataGridView1_CellErrorTextNeeded(object sender,
    DataGridViewCellErrorTextNeededEventArgs e)
{
    if (cellErrorLocation != null)
    {
        if (e.ColumnIndex == cellErrorLocation.ColumnIndex &&
            e.RowIndex == cellErrorLocation.RowIndex)
        {
            e.ErrorText = cellErrorText;
        }
    }
}

private DataTable Populate(string query, bool resetUnsharedCounter)
{
    if (resetUnsharedCounter)
    {
        ResetCounter();
    }

    // Alter the data source as necessary
    SqlDataAdapter adapter = new SqlDataAdapter(query,
        new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;" +
        "Initial Catalog=Northwind;Data Source=localhost"));

    DataTable table = new DataTable();
    table.Locale = System.Globalization.CultureInfo.InvariantCulture;
    adapter.Fill(table);
    return table;
}

private Label count = new Label();
private int unsharedRowCounter;

private void ResetCounter()
{
    unsharedRowCounter = 0;
    count.Text = unsharedRowCounter.ToString();
}

Comentarios

El CellContextMenuStripNeeded evento solo se produce cuando la propiedad de DataGridView control DataSource se establece o su VirtualMode propiedad es true.

Al controlar el CellContextMenuStripNeeded evento, el menú contextual que especifique en el controlador se muestra cada vez que el usuario hace clic con el botón derecho en una celda. Esto resulta útil cuando se quieren mostrar menús contextuales determinados por el estado actual o el valor de una celda.

El CellContextMenuStripNeeded evento también se produce cada vez que se recupera el valor de la DataGridViewCell.ContextMenuStrip propiedad, ya sea mediante programación o cuando el usuario hace clic con el botón derecho en la celda.

Puede usar las ColumnIndex propiedades y RowIndex para determinar el estado o el valor de una celda y usar esta información para establecer la ContextMenuStrip propiedad . Esta propiedad se inicializa con el valor de la propiedad cell ContextMenuStrip , que invalida el valor del evento.

Controle el CellContextMenuStripNeeded evento al trabajar con grandes cantidades de datos para evitar las penalizaciones de rendimiento de establecer el valor de celda ContextMenuStrip para varias celdas. Para obtener más información, consulte Procedimientos recomendados para ajustar la escala del control DataGridView en Windows Forms.

También puede especificar menús contextuales para filas individuales en lugar de celdas individuales estableciendo la propiedad row ContextMenuStrip o controlando el DataGridView evento del RowContextMenuStripNeeded control. El valor de la propiedad cell ContextMenuStrip invalida el valor de la propiedad row ContextMenuStrip y el CellContextMenuStripNeeded evento invalida tanto el RowContextMenuStripNeeded evento como el valor de la propiedad row ContextMenuStrip . Sin embargo, puede especificar null para un menú contextual de celda para evitar que se invalide un menú contextual de fila.

Para obtener más información acerca de cómo controlar eventos, vea controlar y provocar eventos.

Cuando se crea un delegado DataGridViewCellContextMenuStripNeededEventHandler, se identifica el método que controlará el evento. Para asociar el evento al controlador, se debe agregar una instancia del delegado al evento. Siempre que se produce el evento, se llama a su controlador, a menos que se quite el delegado. Para obtener más información sobre los delegados del controlador de eventos, vea Control y generación de eventos.

Métodos de extensión

GetMethodInfo(Delegate)

Obtiene un objeto que representa el método representado por el delegado especificado.

Se aplica a

Producto Versiones
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10

Consulte también