DataGridView.CellContextMenuStripNeeded Olay

Tanım

Bir hücrenin kısayol menüsü gerektiğinde gerçekleşir.

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

Olay Türü

Örnekler

Aşağıdaki kod örneği, kullanıcı bir CellContextMenuStripNeeded hücreye sağ tıkladığında kullanılan özel bir kısayol menüsünü görüntülemek için olay işleyicisinin nasıl kullanılacağını gösterir.

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

Açıklamalar

Olay CellContextMenuStripNeeded yalnızca DataGridView denetim DataSource özelliği ayarlandığında veya VirtualMode özelliği olduğunda truegerçekleşir.

Olayı işlediğinizde, kullanıcı bir hücreye CellContextMenuStripNeeded sağ tıkladığında işleyicide belirttiğiniz kısayol menüsü gösterilir. Bu, bir hücrenin geçerli durumu veya değeri tarafından belirlenen bir kısayol menüsünü görüntülemek istediğinizde kullanışlıdır.

Olay CellContextMenuStripNeeded , özelliğin değeri program aracılığıyla veya kullanıcı bir hücreye DataGridViewCell.ContextMenuStrip sağ tıkladığında da gerçekleşir.

bir hücrenin DataGridViewCellEventArgs.ColumnIndex durumunu veya değerini belirlemek için ve RowIndex özelliklerini kullanabilir ve bu bilgileri özelliği değiştirmek veya değiştirmek için kullanabilirsiniz DataGridViewCellContextMenuStripNeededEventArgs.ContextMenuStrip . Bu özellik, olay değerinin geçersiz kıldığı hücre ContextMenuStrip özelliğinin değeriyle başlatılır.

Birden çok hücre için CellContextMenuStripNeeded hücre ContextMenuStrip değerini ayarlamanın performans cezalarını önlemek için büyük miktarda veriyle çalışırken olayı işleyebilir. Daha fazla bilgi için bkz. Windows Forms DataGridView Denetimini Ölçeklendirmeye Yönelik En İyi Yöntemler.

Satır özelliğini ayarlayarak ContextMenuStrip veya olayı işleyerek RowContextMenuStripNeeded tek tek hücreler yerine tek tek satırlar için kısayol menüleri de belirtebilirsiniz. Hücre ContextMenuStrip özelliği ayarı satır ContextMenuStrip özelliği ayarını geçersiz kılar ve CellContextMenuStripNeeded olay hem olayı hem de RowContextMenuStripNeeded satır ContextMenuStrip özelliği ayarını geçersiz kılar. Ancak, satır kısayolu menüsünün geçersiz kılınmasını önlemek için hücre kısayol menüsü belirtebilirsiniz null .

Olayları işleme hakkında daha fazla bilgi için bkz. Olayları İşleme ve Oluşturma.

Şunlara uygulanır

Ürün Sürümler
.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

Ayrıca bkz.