Después de recorrer los artículos en línea, he creado este diseño para una aplicación de pantalla táctil basada en winforms que necesita un teléfono inteligente como el desplazamiento. La aplicación se ejecutará en una tableta portátil o en una pantalla táctil.cómo obtener un teléfono inteligente como desplazarse por una aplicación de pantalla táctil Winforms (panel de desplazamiento)
- Pongo todo lo que quiero desplazar en un panel.
- Conjunto de desplazamiento automático a verdadero (que mostrará las barras de desplazamiento)
- Ahora poner todo este panel dentro de una caja de grupo
- Reducir el cuadro de grupo hasta que las barras de desplazamiento están ocultos (oculta visualmente, no visible = false)
Ahora la parte divertida en la que estoy estancado. Creo que tengo que manejar el mousedown, mouseup & mousemove en el panel para establecer el autoscrollposition de modo que cuando alguien toca el panel y arrastra, lo hace es scroll magic. Por favor, ayuda a completar las pocas líneas de código en los siguientes talones de métodos. El msdn doc en autoscrollposition es muy confuso ya que devuelve números negativos pero debe establecerse en positivo con abs y lo que no.
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 = ??
}
gracias
// ACTUALIZACIÓN - A continuación tengo con ensayo y error trabajando & código probado. (no refactorizado). Si alguien tiene una solución más elegante, publique.
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
}
Publicar una respuesta no debe hacer una nueva pregunta para cualquier persona que visite el sitio sobre cómo resolver un problema de código. Si tiene un problema con un fragmento de código, intente hacer una pregunta. –