可以';浏览标签时不要像手机一样滚动
本文关键字:手机 滚动 一样 浏览 标签 可以 | 更新日期: 2023-09-27 18:26:51
所以我使用了这个链接中的代码,
如何获得类似智能手机的滚动winforms触摸屏应用程序(滚动面板)
但我遇到了一个问题,在表单中,如果用户点击标签并试图滚动,它就不会移动。因此,我将事件设置为使用相同方法的标签。
lbl.MouseDown += new MouseEventHandler(this.QuestionPanelMouseDown);
lbl.MouseMove += new MouseEventHandler(this.QuestionPanelMouseMove);
这使得它在你点击标签时滚动得超级快。为了适应这种情况,我尝试创建一个新的鼠标移动方法,但将+5和-5改为+1和-1。它减缓了速度,但还不够。位置是int,所以我不能比+1或-1慢。
我认为这个问题与发送的位置有关,它与标签有关,而不是面板本身,但我想不出真正解决这个问题的方法。
经过大量搜索,我找到了答案。当使用链接中的代码时,我更换了
e.Location
带有
PointToClient(Cursor.Position)
所以它看起来是这样的。
Point mouseDownPoint;
private void innerpanel_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
this.mouseDownPoint = PointToClient(Cursor.Position);
}
private void innerpanel_MouseMove(object sender, MouseEventArgs e)
{
Point MouseLoc = PointToClient(Cursor.Position);
if (e.Button != MouseButtons.Left)
return;
if ((mouseDownPoint.X == MouseLoc.X) && (mouseDownPoint.Y == MouseLoc.Y))
return;
Point currAutoS = innerpanel.AutoScrollPosition;
if (mouseDownPoint.Y > MouseLoc.Y)
{
//finger slide UP
if (currAutoS.Y != 0)
currAutoS.Y = Math.Abs(currAutoS.Y) - 5;
}
else if (mouseDownPoint.Y < MouseLoc.Y)
{
//finger slide down
currAutoS.Y = Math.Abs(currAutoS.Y) + 5;
}
else
{
currAutoS.Y = Math.Abs(currAutoS.Y);
}
if (mouseDownPoint.X > MouseLoc.X)
{
//finger slide left
if (currAutoS.X != 0)
currAutoS.X = Math.Abs(currAutoS.X) - 5;
}
else if (mouseDownPoint.X < MouseLoc.X)
{
//finger slide right
currAutoS.X = Math.Abs(currAutoS.X) + 5;
}
else
{
currAutoS.X = Math.Abs(currAutoS.X);
}
innerpanel.AutoScrollPosition = currAutoS;
mouseDownPoint = MouseLoc; //IMPORTANT
}
然后,我为面板内的所有内容制作了鼠标向下和鼠标移动事件,这样无论你点击哪里,它都会以相同的速度滚动。