Exporter (0) Imprimer
Développer tout
Développer Réduire

DataGridView.CellContextMenuStripNeeded, événement

Remarque : cet événement est nouveau dans le .NET Framework version 2.0.

Se produit lorsque le menu contextuel d'une cellule est nécessaire.

Espace de noms : System.Windows.Forms
Assembly : System.Windows.Forms (dans system.windows.forms.dll)

public event DataGridViewCellContextMenuStripNeededEventHandler CellContextMenuStripNeeded
/** @event */
public void add_CellContextMenuStripNeeded (DataGridViewCellContextMenuStripNeededEventHandler value)

/** @event */
public void remove_CellContextMenuStripNeeded (DataGridViewCellContextMenuStripNeededEventHandler value)

JScript prend en charge l'utilisation d'événements mais pas la déclaration de nouveaux événements.

L'événement CellContextMenuStripNeeded se produit uniquement lorsque la propriété DataSource du contrôle DataGridView est définie ou lorsque la valeur de sa propriété VirtualMode est true.

Lorsque vous gérez l'événement CellContextMenuStripNeeded, le menu contextuel que vous spécifiez dans le gestionnaire est affiché à chaque fois que l'utilisateur clique avec le bouton droit sur une cellule. Cette opération est utile lorsque vous souhaitez afficher un menu contextuel déterminé par l'état actuel ou la valeur actuelle d'une cellule.

L'événement CellContextMenuStripNeeded se produit également à chaque fois que la valeur de la propriété DataGridViewCell.ContextMenuStrip est récupérée, par programme ou lorsque l'utilisateur clique avec le bouton droit sur une cellule.

Vous pouvez utiliser les propriétés DataGridViewCellEventArgs.ColumnIndex et RowIndex pour déterminer l'état ou la valeur d'une cellule et utiliser cette information pour modifier la propriété DataGridViewCellContextMenuStripNeededEventArgs.ContextMenuStrip. Cette propriété est initialisée avec la valeur de la propriété ContextMenuStrip de la cellule, que la valeur d'événement substitue.

Gérez l'événement CellContextMenuStripNeeded lorsque vous utilisez des quantités importantes de données pour éviter une altération des performances due à la définition de la valeur de ContextMenuStrip de la cellule pour plusieurs cellules. Pour plus d'informations, consultez Méthodes conseillées pour la mise à l'échelle du contrôle DataGridView Windows Forms.

Vous pouvez également spécifier des menus contextuels pour des lignes plutôt que pour des cellules en définissant la propriété ContextMenuStrip de la ligne ou en gérant l'événement RowContextMenuStripNeeded. Le paramètre de la propriété ContextMenuStrip de la cellule substitue le paramètre de la propriété ContextMenuStrip de la ligne et l'événement CellContextMenuStripNeeded substitue à la fois l'événement RowContextMenuStripNeeded et le paramètre de la propriété ContextMenuStrip de la ligne. Toutefois, vous pouvez spécifier référence Null (Nothing en Visual Basic) pour un menu contextuel de cellule pour empêcher qu'un menu contextuel de ligne ne soit substitué.

Pour plus d'informations sur la gestion des événements, consultez Consommation d'événements.

L'exemple de code suivant illustre l'utilisation d'un gestionnaire d'événements CellContextMenuStripNeeded pour afficher un menu contextuel personnalisé utilisé lorsque l'utilisateur clique avec le bouton droit sur une cellule.

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();
}

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.

.NET Framework

Prise en charge dans : 2.0

Ajouts de la communauté

AJOUTER
Afficher:
© 2015 Microsoft