使用 C#,ContextMenuStrip
当我右键单击DataGridView
. 我对是否应该使用 a DataGridView_CellContentClick
and/or感到困惑dataGridView1.HitTest()
。然后为了解决我的问题,我想将数据从那个右键单击的单元格发送到一个新的表单窗口。
我当前的代码有奇怪的行为。除非我先左键单击或右键单击第 4 列,否则它不会显示 CMS。但是,一旦我拥有它,它总是会在右键单击时显示 CMS。
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 4)
{
//Create the ContextStripMenu for Creating the PO Sub Form
ContextMenuStrip Menu = new ContextMenuStrip();
ToolStripMenuItem MenuOpenPO = new ToolStripMenuItem("Open PO");
//Assign event handlers
MenuOpenPO.MouseUp += new MouseEventHandler(MenuOpenPO_Click);
Menu.Items.AddRange(new ToolStripItem[] { MenuOpenPO });
//Assign created context menu strip to the Datagrid
dataGridView1.ContextMenuStrip = Menu;
}
}
void MenuOpenPO_Click(object sender, MouseEventArgs e)
{
var ht = dataGridView1.HitTest(e.X, e.Y);
MessageBox.Show("Hello2");
PO_Form POWindow = new PO_Form();
POWindow.Show();
}
我打算使用var ht = dataGridView1.HitTest(e.X, e.Y);
来获取单元格值。
任何帮助将不胜感激,谢谢!
编辑 1 所以我将 dataGridView1_CellContentClick 更新为此,它让我非常接近我正在寻找的行为。如果我先左键单击第 4 列,然后右键单击我会得到我的 CMS。如果我左键单击另一列中的任何其他单元格,则右键单击 CMS 不再存在。但是,我希望能够只右键单击第 4 列中的单元格,而不必先左键单击来创建 CMS。
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 4)
{
//MessageBox.Show("Hello1");
//Create the ContextStripMenu for Creating the PO Sub Form
ContextMenuStrip Menu = new ContextMenuStrip();
ToolStripMenuItem MenuOpenPO = new ToolStripMenuItem("Open PO");
//Assign event handlers
MenuOpenPO.MouseUp += new MouseEventHandler(MenuOpenPO_Click);
Menu.Items.AddRange(new ToolStripItem[] { MenuOpenPO });
//Assign created context menu strip to the Datagrid
dataGridView1.ContextMenuStrip = Menu;
}
else
dataGridView1.ContextMenuStrip = null;
}