C# では、ContextMenuStrip
(CMS) の特定の列を右クリックしたときにのみ表示しようとしていDataGridView
ます。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 が表示されなくなります。ただし、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;
}