как получить смартфон, как прокрутку для приложения winforms для сенсорного экрана (панель прокрутки)

После просмотра статей в Интернете я придумал этот дизайн для приложения с сенсорным экраном на основе winforms, которому нужен смартфон, как прокрутка. Само приложение работает на планшетном компьютере или на рабочем столе с сенсорным экраном.

  • Я помещаю все, что хочу прокрутить, на панель.
  • Установите для автопрокрутки значение true (при этом будут отображаться полосы прокрутки)
  • Теперь поместите всю эту панель в групповое окно.
  • Сжимайте групповое окно, пока полосы прокрутки не будут скрыты (визуально скрыты, невидимы = false)

Теперь самое интересное часть, в которой я застрял. Я думаю, что мне нужно обработать mousedown, mouseup и mousemove на панели, чтобы установить положение автоматической прокрутки, чтобы, когда кто-то касается панели и перетаскивает, это волшебство прокрутки. Пожалуйста, помогите заполнить несколько строк кода в заглушках методов ниже. msdn doc об автопрокрутке очень сбивает с толку, поскольку он возвращает отрицательные числа, но его нужно установить в положительное значение с помощью абс, а что нет.

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 = ??
 }

спасибо

// ОБНОВЛЕНИЕ - Ниже приведен работающий и протестированный код методом проб и ошибок. (без рефакторинга). Если у кого-то есть более элегантное решение, напишите об этом.

    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

    }

14
задан Gullu 10 August 2011 в 19:44
поделиться