C # Mouse Tracking Drawing Необычное поведение - PullRequest
1 голос
/ 28 марта 2011

Я только что сделал некоторый простой код для отслеживания смещения мыши от того места, где Mouse Down находится в его текущем положении при перемещении мыши внутри PictureBox.Я вывожу разницу на метку, и она работает нормально.

Итак, скажем, я mousedown в X: 20 Y: 20, затем переместите мышь влево на 5. Мой результат X: 15 Y: 20.

Теперь проблема в том, когда я беру эти результаты (diffX и diffY) и добавляю их к целому числу (testOne и testTwo).Результат экспоненциально отличается.

Наиболее актуально то, что когда я держу мышь в том же положении, не перемещая ее, а просто удерживая кнопку.Результаты продолжают расти.

Я сократил свою проблему до следующего кода:

Point startPoint = new Point();
bool dragging = false;

int testOne = 30;
int testTwo = 30;

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (dragging)
    {
        int diffX = (pictureBox1.PointToClient(e.Location).X - startPoint.X);
        int diffY = (pictureBox1.PointToClient(e.Location).Y - startPoint.Y);

        label9.Text = diffX.ToString();   //Works, shows desired result
        label10.Text = diffY.ToString();  //also works fine

        testOne = (testOne + diffX); //Issue here
        testTwo = (testTwo + diffY); //and here

        label11.Text = (testOne).ToString(); //Unexpected results output
        label12.Text = (testTwo).ToString(); 
    }
}

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    if (!dragging) //Incase the mouse down was repeating, it's not
    {
        startPoint = pictureBox1.PointToClient(e.Location);
        dragging = true;
    }
}

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
    if (dragging)
        dragging = false;
}

Я использую C # WinForms в VS 2008, Framework 3.5

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

Приветствия

Крейг

Ответы [ 2 ]

2 голосов
/ 28 марта 2011

Похоже, что вы вычитаете текущую точку из начальной точки, а не из последней точки.Установите startPoint на текущую точку в конце функции перемещения мыши.

startPoint = pictureBox1.PointToClient(e.Location);
0 голосов
/ 28 марта 2011

Если вы не двигаете мышь, вы не должны получать события MouseMove ... Также нажатие кнопки мыши отправит вам MouseMove. В общем, MouseMove отправляется всякий раз, когда это кажется практичным, и вы также должны быть готовы обрабатывать 0 движений.

Значение testOne и testTwo измеряет «Сумму всех движений мыши», которая будет расти до тех пор, пока смещение мыши (diffX / Y) положительно (по сути, оно является интегралом от движений Моисея). Каковы ваши ожидания от этой ценности?

...