使用 C#,ContextMenuStrip当我右键单击DataGridView. 我对是否应该使用 a DataGridView_CellContentClickand/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;
    }