이 설명서는 보관되지만 유지 되지 않습니다.

DataGridViewCellContextMenuStripNeededEventArgs 클래스

참고: 이 클래스는 .NET Framework 버전 2.0에서 새로 추가되었습니다.

CellContextMenuStripNeeded 이벤트에 대한 데이터를 제공합니다.

네임스페이스: System.Windows.Forms
어셈블리: System.Windows.Forms(system.windows.forms.dll)

public class DataGridViewCellContextMenuStripNeededEventArgs : DataGridViewCellEventArgs
public class DataGridViewCellContextMenuStripNeededEventArgs extends DataGridViewCellEventArgs
public class DataGridViewCellContextMenuStripNeededEventArgs extends DataGridViewCellEventArgs

CellContextMenuStripNeeded 이벤트는 DataGridView 컨트롤의 DataSource 속성이 설정되어 있거나 VirtualMode 속성이 true인 경우에만 발생합니다.

CellContextMenuStripNeeded 이벤트를 처리할 때 사용자가 셀을 마우스 오른쪽 단추로 클릭할 때마다 처리기에서 지정한 바로 가기 메뉴가 표시됩니다. 이 기능은 셀의 현재 상태나 값에 의해 결정되는 바로 가기 메뉴를 표시할 때 유용합니다.

또한 CellContextMenuStripNeeded 이벤트는 프로그래밍 방식으로 또는 사용자가 셀을 마우스 오른쪽 단추로 클릭하여 DataGridViewCell.ContextMenuStrip 속성 값이 검색될 때마다 발생합니다.

ColumnIndexRowIndex 속성을 사용하여 셀의 상태나 값을 확인할 수 있으며 이 정보를 사용하여 ContextMenuStrip 속성을 설정할 수 있습니다. 이 속성은 셀의 ContextMenuStrip 속성 값으로 초기화되며, 이 값은 이벤트 값으로 재정의됩니다.

많은 양의 데이터로 작업할 경우에는 여러 셀에 셀 ContextMenuStrip 값을 설정할 때 발생하는 성능 저하 문제를 방지하기 위해 CellContextMenuStripNeeded 이벤트를 처리해야 합니다. 자세한 내용은 Windows Forms DataGridView 컨트롤의 크기를 조정하는 최선의 방법을 참조하십시오.

행의 ContextMenuStrip 속성을 설정하거나 DataGridView 컨트롤의 RowContextMenuStripNeeded 이벤트를 처리하여 개별 셀 대신 개별 행에 대한 바로 가기 메뉴를 지정할 수도 있습니다. 셀의 ContextMenuStrip 속성 설정은 행의 ContextMenuStrip 속성 설정을 재정의하며 CellContextMenuStripNeeded 이벤트는 RowContextMenuStripNeeded 이벤트와 행의 ContextMenuStrip 속성 설정을 모두 재정의합니다. 셀의 바로 가기 메뉴에 대해 Null 참조(Visual Basic의 경우 Nothing)을 지정하면 행의 바로 가기 메뉴가 재정의되지 않습니다.

이벤트 처리에 대한 자세한 내용은 이벤트 사용을 참조하십시오.

다음 코드 예제에서는 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();
}

System.Object
   System.EventArgs
     System.Windows.Forms.DataGridViewCellEventArgs
      System.Windows.Forms.DataGridViewCellContextMenuStripNeededEventArgs

이 형식의 모든 public static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

.NET Framework

2.0에서 지원
표시: