datagridview のコンテキスト メニューを作成しようとしています。here からいくつかのサンプルを試しましたが、クリックされた行に対して以下が常に-1を返す理由を理解できませんでした。これは winforms であり、グリッドはデータテーブルから取り込まれます。ここで何が間違っていますか?
DataGridView.HitTestInfo hit = dgvResults.HitTest(e.X, e.Y);
私のコード:
private void dgvResults_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex >= 0 && e.RowIndex >= 0 && e.Button == MouseButtons.Right)
{
DataGridView.HitTestInfo hit = dgvResults.HitTest(e.X, e.Y); \\ this shows as -1 always
if (hit.Type == DataGridViewHitTestType.Cell)
{
dgvResults.CurrentCell = dgvResults[hit.ColumnIndex, hit.RowIndex];
cmsResults.Show(dgvResults, e.X, e.Y);
}
}
}
MouseClick イベントを使用すると、動作しているように見えますが、ここで少し迷いました
private void dgvResults_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
int currentMouseOverRow = dgvResults.HitTest(e.X, e.Y).RowIndex;
cmsResults.Show(dgvResults, new Point(e.X, e.Y));
}
}
編集:
最終的に以下のコードで動作するようになりました。
みんなありがとう
私のために働いたコード:
private void dgvResults_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
int currentMouseOverRow = dgvResults.HitTest(e.X, e.Y).RowIndex;
dgvResults.ClearSelection();
if (currentMouseOverRow >= 0) // will show Context Menu Strip if not negative
{
dgvResults.Rows[currentMouseOverRow].Selected = true;
cmsResults.Show(dgvResults, new Point(e.X, e.Y));
row = currentMouseOverRow;
}
}
}