Прочитать на английском

Поделиться через


DataGridViewCellContextMenuStripNeededEventHandler Делегат

Определение

Представляет метод, c помощью которого будет выполняться обработка события CellContextMenuStripNeeded объекта DataGridView.

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

Параметры

sender
Object

Источник события.

e
DataGridViewCellContextMenuStripNeededEventArgs

Объект DataGridViewCellContextMenuStripNeededEventArgs, содержащий данные события.

Примеры

В следующем примере кода используется для DataGridViewCellContextMenuStripNeededEventArgs задания контекстного меню без отмены совместного использования строки.

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

Комментарии

Событие CellContextMenuStripNeeded возникает только в том случае, DataGridView если свойство элемента управления DataSource задано или его VirtualMode свойство имеет значение true.

При обработке CellContextMenuStripNeeded события контекстное меню, указанное в обработчике, отображается всякий раз, когда пользователь щелкает ячейку правой кнопкой мыши. Это полезно, если требуется отобразить контекстные меню, определяемые текущим состоянием или значением ячейки.

Событие CellContextMenuStripNeeded также возникает всякий DataGridViewCell.ContextMenuStrip раз, когда значение свойства извлекается программным способом или когда пользователь щелкает ячейку правой кнопкой мыши.

Свойства и RowIndex можно использовать ColumnIndex для определения состояния или значения ячейки, а также использовать эти сведения для задания ContextMenuStrip свойства . Это свойство инициализируется значением свойства ячейки ContextMenuStrip , которое переопределяется значением события.

CellContextMenuStripNeeded Обрабатывайте событие при работе с большими объемами данных, чтобы избежать снижения производительности при установке значения ячейки ContextMenuStrip для нескольких ячеек. Подробнее см. в разделе Масштабирование элемента управления DataGridView в Windows Forms.

Вы также можете указать контекстные меню для отдельных строк, а не для отдельных ячеек, задав свойство row ContextMenuStrip или об обрабатывая DataGridView событие элемента управления RowContextMenuStripNeeded . Параметр свойства ячейки ContextMenuStrip переопределяет параметр свойства строки ContextMenuStrip , а CellContextMenuStripNeeded событие переопределяет как событие, так RowContextMenuStripNeeded и параметр свойства строки ContextMenuStrip . Однако можно указать null для контекстного меню ячейки, чтобы предотвратить переопределение контекстного меню строки.

Дополнительные сведения об обработке событий см. в разделе Обработка и создание событий.

При создании делегата DataGridViewCellContextMenuStripNeededEventHandler необходимо указать метод, обрабатывающий событие. Чтобы связать событие с обработчиком событий, нужно добавить в событие экземпляр делегата. Обработчик событий вызывается всякий раз, когда происходит событие, если делегат не удален. Дополнительные сведения о делегатах обработчика событий см. в разделе Обработка и вызов событий.

Методы расширения

GetMethodInfo(Delegate)

Получает объект, представляющий метод, представленный указанным делегатом.

Применяется к

Продукт Версии
.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

См. также раздел