DataGridViewCellContextMenuStripNeededEventHandler Delegat

Definicja

Reprezentuje metodę, która obsłuży CellContextMenuStripNeeded zdarzenie klasy DataGridView.

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

Parametry

sender
Object

Źródło zdarzenia.

Przykłady

Poniższy przykład kodu używa polecenia DataGridViewCellContextMenuStripNeededEventArgs do ustawiania menu kontekstowego bez udostępniania wiersza.

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

Uwagi

Zdarzenie CellContextMenuStripNeeded występuje tylko wtedy, gdy właściwość kontrolki DataGridViewDataSource jest ustawiona lub jej VirtualMode właściwość to true.

Po obsłużeniu CellContextMenuStripNeeded zdarzenia menu skrótów określone w procedurze obsługi jest wyświetlane za każdym razem, gdy użytkownik kliknie komórkę prawym przyciskiem myszy. Jest to przydatne, gdy chcesz wyświetlić menu skrótów określone przez bieżący stan lub wartość komórki.

Zdarzenie CellContextMenuStripNeeded występuje również za każdym razem, gdy zostanie pobrana wartość DataGridViewCell.ContextMenuStrip właściwości, programowo lub gdy użytkownik kliknie prawym przyciskiem myszy komórkę.

Możesz użyć ColumnIndex właściwości i RowIndex , aby określić stan lub wartość komórki i użyć tych informacji do ustawienia ContextMenuStrip właściwości. Ta właściwość jest inicjowana z wartością właściwości komórki ContextMenuStrip , która zastępuje wartość zdarzenia.

Obsługa zdarzenia CellContextMenuStripNeeded podczas pracy z dużymi ilościami danych, aby uniknąć kar za wydajność ustawiania wartości komórki ContextMenuStrip dla wielu komórek. Aby uzyskać więcej informacji, zobacz Najlepsze rozwiązania dotyczące skalowania kontrolki Windows Forms DataGridView.

Można również określić menu skrótów dla poszczególnych wierszy, a nie poszczególnych komórek, ustawiając właściwość wiersza ContextMenuStrip lub obsługując DataGridView zdarzenie kontrolki RowContextMenuStripNeeded . Ustawienie właściwości komórki ContextMenuStrip zastępuje ustawienie właściwości wiersza ContextMenuStrip , a CellContextMenuStripNeeded zdarzenie zastępuje RowContextMenuStripNeeded zarówno zdarzenie, jak i ustawienie właściwości wiersza ContextMenuStrip . Można jednak określić null menu skrótów komórek, aby uniemożliwić zastępowanie menu skrótów wierszy.

Aby uzyskać więcej informacji na temat obsługi zdarzeń, zobacz Obsługa i podnoszenie zdarzeń.

Podczas tworzenia delegata należy zidentyfikować metodę DataGridViewCellContextMenuStripNeededEventHandler , która będzie obsługiwać zdarzenie. Aby skojarzyć zdarzenie z programem obsługi zdarzeń, dodaj wystąpienie delegata do zdarzenia. Program obsługi zdarzeń jest wywoływany przy każdym wystąpieniu zdarzenia, o ile nie usunięto delegata. Aby uzyskać więcej informacji na temat delegatów programu obsługi zdarzeń, zobacz Obsługa i podnoszenie zdarzeń.

Metody rozszerzania

GetMethodInfo(Delegate)

Pobiera obiekt reprezentujący metodę reprezentowaną przez określonego delegata.

Dotyczy

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

Zobacz też