C# 的dataGridView 怎样获取鼠标坐标位置所在行呢?

tank_2009 2009-09-02 05:54:46
RT

通过坐标点来定位dataGridView 的某一行,谢谢
...全文
1158 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsj1987 2010-02-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ainidehsj 的回复:]
gv.HitTest(e.X,   e.Y).RowIndex
[/Quote]
受用,7楼的,3Q
ainidehsj 2009-10-29
  • 打赏
  • 举报
回复
gv.HitTest(e.X, e.Y).RowIndex
tank_2009 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lzsh0622 的回复:]
给你正确答案:

C# code

     返回光标处的行索引号()publicint GetRowIndexAt(int mouseLocation_Y)
{if (dataGridView1.FirstDisplayedScrollingRowIndex<0)
{return-1;// no rows. }if (dataGridView1.ColumnHeadersVisible==true&& mouseLocation_Y<= dataGridView1.ColumnHeadersHeight)
{return-1;
}int index= dataGridView1.FirstDisplayedScrollingRowIndex;int displayedCount= dataGridView1.DisplayedRowCount(true);for (int k=1; k<= displayedCount; )// 因为行不能ReOrder,故只需要搜索显示的行 {if (dataGridView1.Rows[index].Visible==true)
{
Rectangle rect= dataGridView1.GetRowDisplayRectangle(index,true);// 取该区域的显示部分区域if (rect.Top<= mouseLocation_Y&& mouseLocation_Y< rect.Bottom)
{return index;
}
k++;// 只计数显示的行; }
index++;
}return-1;
}

测试用代码:

    把当前行的index号(从0开始)显示到TextBox1上。
        private void dataGridView1_MouseMove(object sender, MouseEventArgs e)
        {
            textBox1.Text= GetRowIndexAt(e.Y).ToString(); 
        }

[/Quote]

3Q~~~~~~~~~~~
lzsh0622 2009-09-02
  • 打赏
  • 举报
回复
给你正确答案:



     返回光标处的行索引号()
public int GetRowIndexAt(int mouseLocation_Y)
{
if (dataGridView1.FirstDisplayedScrollingRowIndex < 0)
{
return -1; // no rows.
}
if (dataGridView1.ColumnHeadersVisible == true && mouseLocation_Y <= dataGridView1.ColumnHeadersHeight)
{
return -1;
}
int index = dataGridView1.FirstDisplayedScrollingRowIndex;
int displayedCount = dataGridView1.DisplayedRowCount(true);
for (int k = 1; k <= displayedCount; ) // 因为行不能ReOrder,故只需要搜索显示的行
{
if (dataGridView1.Rows[index].Visible == true)
{
Rectangle rect = dataGridView1.GetRowDisplayRectangle(index, true); // 取该区域的显示部分区域
if (rect.Top <= mouseLocation_Y && mouseLocation_Y < rect.Bottom)
{
return index;
}
k++; // 只计数显示的行;
}
index++;
}
return -1;
}



测试用代码:

    把当前行的index号(从0开始)显示到TextBox1上。
private void dataGridView1_MouseMove(object sender, MouseEventArgs e)
{
textBox1.Text= GetRowIndexAt(e.Y).ToString();
}
tank_2009 2009-09-02
  • 打赏
  • 举报
回复
UP。
tank_2009 2009-09-02
  • 打赏
  • 举报
回复
UP~~
tank_2009 2009-09-02
  • 打赏
  • 举报
回复
想在鼠标经过的某行,改变一下他的风格。我是在做行拖动时想要这样的效果。
是Winform

谢谢
风之影子 2009-09-02
  • 打赏
  • 举报
回复
说你的需求吧.

定位完后要做什么呢?

有个事件是光标移动到行上时发生.
在此事件下可以取出鼠标的值.

111,110

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧