英語で読む

次の方法で共有


DataGridViewCellContextMenuStripNeededEventHandler 代理人

定義

CellContextMenuStripNeededDataGridView イベントを処理するメソッドを表します。

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

パラメーター

sender
Object

イベントのソース。

次のコード例では、 を使用 DataGridViewCellContextMenuStripNeededEventArgs して、行の共有を解除せずにコンテキスト メニューを設定します。

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

注釈

イベントはCellContextMenuStripNeeded、コントロール DataSource プロパティが設定されているか、DataGridViewそのVirtualModeプロパティが であるtrue場合にのみ発生します。

イベントを CellContextMenuStripNeeded 処理すると、ユーザーがセルを右クリックするたびに、ハンドラーで指定したショートカット メニューが表示されます。 これは、セルの現在の状態または値によって決まるショートカット メニューを表示する場合に便利です。

イベントは CellContextMenuStripNeeded 、プログラムによって、またはユーザーがセルを DataGridViewCell.ContextMenuStrip 右クリックしたときに、プロパティの値が取得されるたびに発生します。

プロパティと RowIndex プロパティをColumnIndex使用してセルの状態または値を決定し、この情報を使用して プロパティをContextMenuStrip設定できます。 このプロパティは、イベント値がオーバーライドする cell ContextMenuStrip プロパティの値で初期化されます。

大量のデータを CellContextMenuStripNeeded 操作するときにイベントを処理して、複数のセルのセル ContextMenuStrip 値を設定するパフォーマンスの低下を回避します。 詳細については、「 Windows フォーム DataGridView コントロールを拡張するための推奨される手順」を参照してください。

行プロパティを設定するか、コントロールのイベントを処理することで、個々のセルではなく、個々の行ContextMenuStripRowContextMenuStripNeededショートカット メニューをDataGridView指定することもできます。 セルContextMenuStripプロパティの設定は行ContextMenuStripプロパティの設定をオーバーライドし、イベントはCellContextMenuStripNeededイベントと行ContextMenuStripプロパティの設定の両方RowContextMenuStripNeededをオーバーライドします。 ただし、セルのショートカット メニューに を指定 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

こちらもご覧ください