Draggable Winforms в Excel - PullRequest
       13

Draggable Winforms в Excel

0 голосов
/ 20 апреля 2019

У меня проблема с алгоритмом перетаскивания элемента управления Winforms, помещенного в лист Excel. При перетаскивании он перемещается от курсора к сторонам листа назад и вперед, а после остановки трясется, как лист.

ControlSite controlSite;

double xOffset, yOffset;

private void Control_MouseDown(object sender, MouseEventArgs e) {

    if (e.Button == MouseButtons.Left) {

        xOffset = e.X;
        yOffset = e.Y;
    }
}

private void Control_MouseMove(object sender, MouseEventArgs e) {

    if (e.Button == MouseButtons.Left) {

        controlSite.Top += e.Y - yOffset;
        controlSite.Left += e.X - xOffset;
    }
}

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

PS. Извините, если мой английский не идеален.

1 Ответ

0 голосов
/ 21 апреля 2019

Хорошо, у меня это есть: D

ControlSite controlSite;

double xOffset, yOffset;

double worksheetX, worksheetY;

void Control_MouseDown(object sender, MouseEventArgs e) {

    if (e.Button == MouseButtons.Left) {

        xOffset = e.X;
        yOffset = e.Y;

        worksheetX = MousePosition.X - xOffset - ControlSite.Left;
        worksheetY = MousePosition.Y - yOffset - ControlSite.Top;
    }
}

void Control_MouseMove(object sender, MouseEventArgs e) {       

    if (e.Button == MouseButtons.Left) {                

        controlSite.Top = MousePosition.Y - yOffset - worksheetY;
        controlSite.Left = MousePosition.X - xOffset - worksheetX;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...