gpt4 book ai didi

c# - 如何识别右键单击 ContextMenuStrip 的 dataGridView 单元格?

转载 作者:太空狗 更新时间:2023-10-30 00:32:36 25 4
gpt4 key购买 nike

用户右键单击 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;
}
}

我应该用两种不同的方法来做这件事吗?一个处理鼠标单击(然后我可以在其中捕获 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;
}
}

最佳答案

您可以通过为 DataGridView 的鼠标单击添加事件处理程序来跟踪最后单击的单元格。

类似于:

    DataGridViewCell clickedCell;

private void dataGridView1_CellMouseClick_1(object sender, DataGridViewCellMouseEventArgs e)
{
try
{
DataGridView view = (DataGridView)sender;

if (e.Button == System.Windows.Forms.MouseButtons.Right && e.RowIndex >= 0)
{
Console.WriteLine("Clicked column "
+ e.ColumnIndex + ", row "
+ e.RowIndex + " of DataGridView "
+ view.Name + " at "
+ System.Windows.Forms.Cursor.Position);

clickedCell = view.Rows[e.RowIndex].Cells[e.ColumnIndex];
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
}
}

然后在您的 contextMenuStripItem 单击事件中,打开 clickedCell.Value,例如:

switch (clickedCell.Value)
{
case "Copy":
break;
... // etc.
}

关于c# - 如何识别右键单击 ContextMenuStrip 的 dataGridView 单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16701943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com