Po przejrzeniu artykułów online wymyśliłem ten projekt dla aplikacji z ekranem dotykowym, która potrzebuje smartfonu jak przewijanie. Sama aplikacja będzie działać na laptopie z tabletem lub na pulpicie dotykowym.jak zdobyć smartfona jak przewijanie dla aplikacji z ekranem dotykowym WinForm (przewijany panel)
- Położyłem wszystko, co chcę przewinąć na panelu.
- Set Autoscroll true (który pokaże przewijania)
- Teraz umieścić ten cały panel wewnątrz groupbox
- Zwężenie groupbox aż paski przewijania są ukryte (wizualnie ukryty, niewidoczny = false)
Teraz zabawa, w którą utknąłem. Myślę, że muszę obsłużyć mousedown, mouseup & mousemove na panelu, aby ustawić autoprzestrzeń tak, że gdy ktoś dotknie panelu i przeciągnie, zrobi to magia przewijania. Proszę pomóż wypełnić kilka linii kodu w poniższych informacjach o metodach. msdn doc w autoprzeźroczystej pozycji jest bardzo mylące, ponieważ zwraca liczby ujemne, ale musi być ustawione na dodatnie z abs, a co nie.
Point mouseDownPoint;
Point mouseUpPoint;
Point mouseDragPoint;
private void myPanel_MouseDown(object sender, MouseEventArgs e)
{
this.mouseDownPoint = e.Location;
Console.WriteLine("Mouse down at {0}", e.location);
}
private void myPanel_MouseUp(object sender, MouseEventArgs e)
{
this.mouseUpPoint = e.Location;
this.mouseDownPoint = new Point(); //will set for IsEmpty check
Console.WriteLine("Mouse Up at {0}", e.location);
}
private void myPanel_MouseMove(object sender, MouseEventArgs e)
{
Console.WriteLine("Mouse at {0}", e.location);
if (mouseDownPoint.IsEmpty()) //finger is off the touchscreen
return;
myPanel.Autocrollposition = ??
}
dziękuję
// UPDATE - Poniżej mam z prób i błędów pracy & przetestowany kod. (nie refaktoryzowane). Jeśli ktoś ma bardziej eleganckie rozwiązanie, opublikuj.
Point mouseDownPoint;
private void innerpanel_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
this.mouseDownPoint = e.Location;
}
private void innerpanel_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
return;
if ((mouseDownPoint.X == e.Location.X) && (mouseDownPoint.Y == e.Location.Y))
return;
Point currAutoS = innerpanel.AutoScrollPosition;
if (mouseDownPoint.Y > e.Location.Y)
{
//finger slide UP
if (currAutoS.Y != 0)
currAutoS.Y = Math.Abs(currAutoS.Y) - 5;
}
else if (mouseDownPoint.Y < e.Location.Y)
{
//finger slide down
currAutoS.Y = Math.Abs(currAutoS.Y) + 5;
}
else
{
currAutoS.Y = Math.Abs(currAutoS.Y);
}
if (mouseDownPoint.X > e.Location.X)
{
//finger slide left
if (currAutoS.X != 0)
currAutoS.X = Math.Abs(currAutoS.X) - 5;
}
else if (mouseDownPoint.X < e.Location.X)
{
//finger slide right
currAutoS.X = Math.Abs(currAutoS.X) + 5;
}
else
{
currAutoS.X = Math.Abs(currAutoS.X);
}
innerpanel.AutoScrollPosition = currAutoS;
mouseDownPoint = e.Location; //IMPORTANT
}
Zamieszczanie odpowiedzi nie powinno zadawać nowych pytań osobom odwiedzającym witrynę w celu rozwiązania problemu z kodem. Jeśli masz problem z fragmentem kodu, spróbuj zadać pytanie. –