gpt4 book ai didi

c# - Datagridview 上下文菜单总是在 hittest 中显示 -1

转载 作者:行者123 更新时间:2023-12-04 05:03:26 25 4
gpt4 key购买 nike

我正在尝试为数据 GridView 创建上下文菜单。我已经从这里尝试了一些示例,但无法理解为什么下面总是为单击的任何行返回 -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;
}
}
}

最佳答案

看看——

http://bytes.com/topic/c-sharp/answers/826824-invalid-coordinates-datagridview-hittest

特别是-

Point p = dataGridView2.PointToClient(new Point(e.X, e.Y);
DataGridView.HitTestInfo info = dataGridView2.HitTest(p.X, p.Y);
int row = info.RowIndex;

关于c# - Datagridview 上下文菜单总是在 hittest 中显示 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15831680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com