ユーザーは DGV 内のセルを右クリックし、ContextMenuStrip で選択を行います。彼らの CMS の選択に基づいて、何かをしたい (コピー、非表示、フィルター)。私の問題は、右クリックされたセルを識別することです。
以下の方法で対処しようとしたのですが、[ColumnIndex]が参照できません。
private void cmsDataGridView_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
switch (e.ClickedItem.Text)
{
case "Copy":
break;
case "Filter On":
break;
case "Hide Column":
DataGridViewBand band = dataGridView1.Columns[e.ColumnIndex];
band.Visible = false;
break;
}
}
これを2つの異なる方法で行う必要がありますか? 1 つはマウス クリックを処理するもので (DGV 列のインデックスを取得できます)、そこから CMS アイテムのクリック イベントを呼び出しますか?
助けてくれてありがとう、ブライアン。
私のために働くコード。ああ、デザイナー内の dataGridView の ContextMenuStrip プロパティから cmsDataGridView メソッドを削除する必要がありました。そこに放置すると問題が発生しました。
// Identify the cell clicked for cmsDataGridView
DataGridViewCell clickedCell;
private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
try
{
if (e.Button == MouseButtons.Right)
{
dataGridView1.ClearSelection();
clickedCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
clickedCell.Selected = true;
cmsDataGridView.Show(dataGridView1, e.Location);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
}
}
private void cmsDataGridView_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
switch (e.ClickedItem.Text)
{
case "Copy":
break;
case "Filter On":
break;
case "Hide Column":
DataGridViewBand band = dataGridView1.Columns[clickedCell.ColumnIndex];
band.Visible = false;
break;
}
}