DataGridView中,用鼠标代替滚动条的问题

时间:2022-03-16 05:27:48
问题的详细描述:
    我用DataGridView显示数据库中的数据,但是出现了滚动条(水平和竖直),我想让滚动条消失,用鼠标来替代它的功能。最好鼠标的默认焦点在第一行(注意不是单元格,用一条线显示),鼠标滚动的时候,显示线跟着移动。请问代码怎么写?

29 个解决方案

#1


这个。。。
功能是可以实现的,过程不好口述,得自己发挥了

#2


怎么不好口述?帮帮忙嘛,用代码还是改属性?总能说清楚的

#3



        public void Form5_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)
                {
                    dataGridView1.Rows[index + 1].Selected = true;
                }
                dataGridView1.Focus();
            }
        }

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


我捣鼓了一下,这个实现了滚动滑轮记录跟着移动,但是移到dataGridView1显示的范围边缘下面就看不见了
你看看有什么办法解决

#4



        public void Form5_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)
                {
                    dataGridView1.Rows[index + 1].Selected = true;
                }
                dataGridView1.Focus();
                this.dataGridView1.FirstDisplayedScrollingRowIndex = index;//始终显示选中的行
            }
        }

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


搞定了  Lz试试吧

#5



//最上面忘了两行
        [DllImport("user32.dll")]
        public static extern int WindowFromPoint(int xPoint, int yPoint);

#6



//Form.designer.cs里面在datagridview的地方加入鼠标滚轮事件
this.dataGridView1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.dataGridView1_MouseWheel);

        private void dataGridView1_MouseWheel(object sender, MouseEventArgs e)
        {
            int rowIndex = this.dataGridView1.CurrentRow.Index;
            this.dataGridView1.ClearSelection();

            if (e.Delta > 0)
            {
                if (rowIndex > 0)
                {
                    this.dataGridView1.CurrentCell = this.dataGridView1.Rows[rowIndex - 1].Cells[0];
                    this.dataGridView1.Rows[rowIndex - 1].Selected = true;
                }
                else
                {
                    this.dataGridView1.CurrentCell = this.dataGridView1.Rows[rowIndex].Cells[0];
                    this.dataGridView1.Rows[rowIndex].Selected = true;
                }
            }
            else
            {
                if (rowIndex < this.dataGridView1.Rows.Count - 1)
                {
                    this.dataGridView1.CurrentCell = this.dataGridView1.Rows[rowIndex + 1].Cells[0];
                    this.dataGridView1.Rows[rowIndex + 1].Selected = true;
                }
                else
                {
                    this.dataGridView1.CurrentCell = this.dataGridView1.Rows[rowIndex].Cells[0];
                    this.dataGridView1.Rows[rowIndex].Selected = true;
                }
            }
        }

#7


至于你说的选中一行而不是一个单元格  设置SelectionMode属性为FullRowSelect

#8


农民牛叉呀。

#9


谢谢wnyxy和jiaht2009两位,我先试试,结贴加分给你俩......

#10


我用的是VS2010,上面没有SelectionMode属性啊

#11


引用 10 楼 cairongyu02064 的回复:
我用的是VS2010,上面没有SelectionMode属性啊


datagridview里也有的   

#12


滚动条不显示  ScrollBars设为none知道吧

#13


这个是知道啦,不过ScrollBars设为none了后,就只能看到当前的数据了,下面的都看不到了。。。。。。
刚试了下上面的代码,都不能通过,不知道是不是我弄错了什么,两位牛人多指点些我容易忽略的地方,我好多东西不懂的。。。。。。

#14


你看我4楼不是加了一句么?
this.dataGridView1.FirstDisplayedScrollingRowIndex = index;//始终显示选中的行

#15


//Form.designer.cs里面在datagridview的地方加入鼠标滚轮事件
this.dataGridView1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.dataGridView1_MouseWheel);

这个事件一定要加入,这个事件是在datagridview得到焦点以后,鼠标的滚轮在上面来回滚触发的

#16


你先用鼠标点击一下datagridview 然后吧啦鼠标滚轮

别说你的鼠标没有。。。

#17


to 15楼
在Form.designer.cs里面在datagridview的地方加入鼠标滚轮事件了,加了后就显示有错误啊 
dataGridView1_MouseWheel下有红划线啊
to 14楼
我是新手,你的那个win32 API调用我都没用过。。。。。。
详细讲下,是要加那个什么 using <mscorlib.dll> 吧,我很不懂。。。。。。

#18


加个using System.Runtime.InteropServices;

#19


或者你把
[DllImport("user32.dll")]改成
[System.Runtime.InteropServices.DllImport("user32.dll")]

#20


现在我的编译是不出错了,但是结果跟我以前的没什么区别。。。。。。
我在属性栏里就没找到SelectionMode属性和MouseWheel属性。。。。。。

#21


DataGridView中,用鼠标代替滚动条的问题

#22


datagridview 的属性栏里真的没有

#23


不带这样鄙视人的......

#24


你先把我们的代码保存下去慢慢看看吧

国庆节快乐  放假喽~~~~~~~~~~~~~~~~~

#25


恩,解放了,结帖的时候会把分给你的......

#26


农民很无语哦。。。

我在属性栏里就没找到SelectionMode属性和MouseWheel属性。。。。。。
---》
SelectionMode是datagridview的属性
MouseWheel是datagridview的事件

#27


好贴,找了很长时间,一下就搞定了!佩服!

#28


先坐下,有空慢慢研究2位高手思路!

#29


上面的设置上下滚动,请问如何设置左右滚动啊?

#1


这个。。。
功能是可以实现的,过程不好口述,得自己发挥了

#2


怎么不好口述?帮帮忙嘛,用代码还是改属性?总能说清楚的

#3



        public void Form5_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)
                {
                    dataGridView1.Rows[index + 1].Selected = true;
                }
                dataGridView1.Focus();
            }
        }

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


我捣鼓了一下,这个实现了滚动滑轮记录跟着移动,但是移到dataGridView1显示的范围边缘下面就看不见了
你看看有什么办法解决

#4



        public void Form5_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)
                {
                    dataGridView1.Rows[index + 1].Selected = true;
                }
                dataGridView1.Focus();
                this.dataGridView1.FirstDisplayedScrollingRowIndex = index;//始终显示选中的行
            }
        }

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


搞定了  Lz试试吧

#5



//最上面忘了两行
        [DllImport("user32.dll")]
        public static extern int WindowFromPoint(int xPoint, int yPoint);

#6



//Form.designer.cs里面在datagridview的地方加入鼠标滚轮事件
this.dataGridView1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.dataGridView1_MouseWheel);

        private void dataGridView1_MouseWheel(object sender, MouseEventArgs e)
        {
            int rowIndex = this.dataGridView1.CurrentRow.Index;
            this.dataGridView1.ClearSelection();

            if (e.Delta > 0)
            {
                if (rowIndex > 0)
                {
                    this.dataGridView1.CurrentCell = this.dataGridView1.Rows[rowIndex - 1].Cells[0];
                    this.dataGridView1.Rows[rowIndex - 1].Selected = true;
                }
                else
                {
                    this.dataGridView1.CurrentCell = this.dataGridView1.Rows[rowIndex].Cells[0];
                    this.dataGridView1.Rows[rowIndex].Selected = true;
                }
            }
            else
            {
                if (rowIndex < this.dataGridView1.Rows.Count - 1)
                {
                    this.dataGridView1.CurrentCell = this.dataGridView1.Rows[rowIndex + 1].Cells[0];
                    this.dataGridView1.Rows[rowIndex + 1].Selected = true;
                }
                else
                {
                    this.dataGridView1.CurrentCell = this.dataGridView1.Rows[rowIndex].Cells[0];
                    this.dataGridView1.Rows[rowIndex].Selected = true;
                }
            }
        }

#7


至于你说的选中一行而不是一个单元格  设置SelectionMode属性为FullRowSelect

#8


农民牛叉呀。

#9


谢谢wnyxy和jiaht2009两位,我先试试,结贴加分给你俩......

#10


我用的是VS2010,上面没有SelectionMode属性啊

#11


引用 10 楼 cairongyu02064 的回复:
我用的是VS2010,上面没有SelectionMode属性啊


datagridview里也有的   

#12


滚动条不显示  ScrollBars设为none知道吧

#13


这个是知道啦,不过ScrollBars设为none了后,就只能看到当前的数据了,下面的都看不到了。。。。。。
刚试了下上面的代码,都不能通过,不知道是不是我弄错了什么,两位牛人多指点些我容易忽略的地方,我好多东西不懂的。。。。。。

#14


你看我4楼不是加了一句么?
this.dataGridView1.FirstDisplayedScrollingRowIndex = index;//始终显示选中的行

#15


//Form.designer.cs里面在datagridview的地方加入鼠标滚轮事件
this.dataGridView1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.dataGridView1_MouseWheel);

这个事件一定要加入,这个事件是在datagridview得到焦点以后,鼠标的滚轮在上面来回滚触发的

#16


你先用鼠标点击一下datagridview 然后吧啦鼠标滚轮

别说你的鼠标没有。。。

#17


to 15楼
在Form.designer.cs里面在datagridview的地方加入鼠标滚轮事件了,加了后就显示有错误啊 
dataGridView1_MouseWheel下有红划线啊
to 14楼
我是新手,你的那个win32 API调用我都没用过。。。。。。
详细讲下,是要加那个什么 using <mscorlib.dll> 吧,我很不懂。。。。。。

#18


加个using System.Runtime.InteropServices;

#19


或者你把
[DllImport("user32.dll")]改成
[System.Runtime.InteropServices.DllImport("user32.dll")]

#20


现在我的编译是不出错了,但是结果跟我以前的没什么区别。。。。。。
我在属性栏里就没找到SelectionMode属性和MouseWheel属性。。。。。。

#21


DataGridView中,用鼠标代替滚动条的问题

#22


datagridview 的属性栏里真的没有

#23


不带这样鄙视人的......

#24


你先把我们的代码保存下去慢慢看看吧

国庆节快乐  放假喽~~~~~~~~~~~~~~~~~

#25


恩,解放了,结帖的时候会把分给你的......

#26


农民很无语哦。。。

我在属性栏里就没找到SelectionMode属性和MouseWheel属性。。。。。。
---》
SelectionMode是datagridview的属性
MouseWheel是datagridview的事件

#27


好贴,找了很长时间,一下就搞定了!佩服!

#28


先坐下,有空慢慢研究2位高手思路!

#29


上面的设置上下滚动,请问如何设置左右滚动啊?