Auf Englisch lesen

Freigeben über


DataGridView.CellContextMenuStripNeeded Ereignis

Definition

Tritt ein, wenn das Kontextmenü einer Zelle benötigt wird.

public event System.Windows.Forms.DataGridViewCellContextMenuStripNeededEventHandler CellContextMenuStripNeeded;
public event System.Windows.Forms.DataGridViewCellContextMenuStripNeededEventHandler? CellContextMenuStripNeeded;

Ereignistyp

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie ein CellContextMenuStripNeeded Ereignishandler verwendet wird, um ein benutzerdefiniertes Kontextmenü anzuzeigen, das verwendet wird, wenn der Benutzer mit der rechten Maustaste auf eine Zelle klickt.

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

Hinweise

Das CellContextMenuStripNeeded Ereignis tritt nur auf, wenn die DataGridView Steuerelementeigenschaft DataSource festgelegt ist oder die VirtualMode -Eigenschaft ist true.

Wenn Sie das CellContextMenuStripNeeded Ereignis behandeln, wird das Kontextmenü angezeigt, das Sie im Handler angeben, wenn der Benutzer mit der rechten Maustaste auf eine Zelle klickt. Dies ist nützlich, wenn Sie ein Kontextmenü anzeigen möchten, das vom aktuellen Zustand oder Wert einer Zelle bestimmt wird.

Das CellContextMenuStripNeeded Ereignis tritt auch auf, wenn der Wert der DataGridViewCell.ContextMenuStrip Eigenschaft abgerufen wird, entweder programmgesteuert oder wenn der Benutzer mit der rechten Maustaste auf eine Zelle klickt.

Sie können die DataGridViewCellEventArgs.ColumnIndex Eigenschaften und RowIndex verwenden, um den Zustand oder Wert einer Zelle zu bestimmen, und diese Informationen verwenden, um die DataGridViewCellContextMenuStripNeededEventArgs.ContextMenuStrip Eigenschaft zu ändern oder zu ändern. Diese Eigenschaft wird mit dem Wert der Zelleigenschaft ContextMenuStrip initialisiert, die vom Ereigniswert überschrieben wird.

Behandeln Sie das CellContextMenuStripNeeded Ereignis, wenn Sie mit großen Datenmengen arbeiten, um Leistungseinbußen beim Festlegen des Zellwerts ContextMenuStrip für mehrere Zellen zu vermeiden. Weitere Informationen finden Sie unter Empfohlene Vorgehensweisen für das Skalieren des DataGridView-Steuerelements in Windows Forms.

Sie können auch Kontextmenüs für einzelne Zeilen anstelle einzelner Zellen angeben, indem Sie die Zeileneigenschaft ContextMenuStrip festlegen oder das RowContextMenuStripNeeded Ereignis behandeln. ContextMenuStrip Die Zelleigenschaftseinstellung überschreibt die ZeileneigenschaftseinstellungContextMenuStrip, und das CellContextMenuStripNeeded Ereignis überschreibt sowohl das RowContextMenuStripNeeded Ereignis als auch die Einstellung der ZeileneigenschaftContextMenuStrip. Sie können jedoch für ein Zellverknüpfungsmenü angeben null , um zu verhindern, dass ein Zeilenverknüpfungsmenü überschrieben wird.

Weitere Informationen zum Behandeln von Ereignissen finden Sie unter behandeln und Auslösen von Ereignissen.

Gilt für:

Produkt Versionen
.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

Weitere Informationen