求教如何控制datagridview控件的鼠标滚动行数

CADILLAC_AC 2011-10-04 04:52:34
默认为滚动3行。需求在不对其他应用程序造成干扰的前提下控制其鼠标滚动行数,如每次只滚动一行
...全文
226 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
CADILLAC_AC 2011-10-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wnyxy 的回复:]
那你就把选中行的 Selected那两句换掉好了啊
dataGridView1.Rows[index - 1].Selected = true; 换成index-=1;
dataGridView1.Rows[index + 1].Selected = true; 换成index+=1;

this.dataGridView1.FirstDisplayedScrollingRowIndex ……
[/Quote]
用过了,如果这么改就不行。意义不一样的。
wnyxy001 2011-10-08
  • 打赏
  • 举报
回复
那你就把选中行的 Selected那两句换掉好了啊
dataGridView1.Rows[index - 1].Selected = true; 换成index-=1;
dataGridView1.Rows[index + 1].Selected = true; 换成index+=1;

this.dataGridView1.FirstDisplayedScrollingRowIndex = index;
这句会决定显示哪一行但没有选中,你可以通过改变index的值来滚动dataGridView的行数
并且随意选中某行
CADILLAC_AC 2011-10-08
  • 打赏
  • 举报
回复
谢谢,这个我也看到了。这里有个问题,他的滚动使得选中格发生变化了,我倾向于选区不要发生变化,因为这样才能方便边滚动边选中,不然就没意义了。
wnyxy001 2011-10-08
  • 打赏
  • 举报
回复

private void dataGridView1_MouseEnter(object sender, EventArgs e)
{
this.MouseWheel += new MouseEventHandler(Dgv_MouseWheel);
}


[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int WindowFromPoint(int xPoint, int yPoint);

void Dgv_MouseWheel(object sender, MouseEventArgs e)
{
int index=dataGridView1.SelectedRows[0].Index;
System.Drawing.Point p = PointToScreen(e.Location);
if (WindowFromPoint(p.X, p.Y) == dataGridView1.Handle.ToInt32())
{
if (e.Delta == 120) //向前滚
{
if (index >= 1)
{
dataGridView1.Rows[index - 1].Selected = true;
}
}
else if (e.Delta < 0) //向后滚
{
if (index < dataGridView1.Rows.Count-1)
{
dataGridView1.Rows[index + 1].Selected = true;
}
}
dataGridView1.Focus();
this.dataGridView1.FirstDisplayedScrollingRowIndex = index;
}
}

这是上次回答别人问题时写的,dataGridView的ScrollBars属性设为none,这样可以一行一行的滚,你看看符不符合你的需求
CADILLAC_AC 2011-10-08
  • 打赏
  • 举报
回复
顶一下
星小野 2011-10-04
  • 打赏
  • 举报
回复
++[Quote=引用 2 楼 bdmh 的回复:]
加MouseWheel事件,然后根据delta,确定你要滚动的行数,然后指定grid的行的位置
[/Quote]
CADILLAC_AC 2011-10-04
  • 打赏
  • 举报
回复
对啊,这个事件我能找到啊,关键是如何使用这个delta来设置行数,这个是重点。
bdmh 2011-10-04
  • 打赏
  • 举报
回复
加MouseWheel事件,然后根据delta,确定你要滚动的行数,然后指定grid的行的位置
神棍 2011-10-04
  • 打赏
  • 举报
回复
有个MouseWheel事件你可以试试,但是我记得e.Delit什么属性似乎是只读的,而且指定的只是增幅或减幅,用来判断向上滚动还是向下滚动。
然后用控制滚动条的位置便可。
没有测试过,不保证可行。

111,092

社区成员

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

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

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