0

C# では、ContextMenuStrip(CMS) の特定の列を右クリックしたときにのみ表示しようとしていDataGridViewます。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 が表示されなくなります。ただし、CMS を作成するために最初に左クリックしなくても、列 4 のセルを右クリックできるようにしたいと考えています。

        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;
    }
4

2 に答える 2