Создание подвижного элемента управления с нуля - PullRequest
1 голос
/ 22 марта 2012

Я должен создать пользовательский элемент управления, куда вы можете переместить его, но я должен сделать его с нуля (т.е. получить положение элемента управления и вычислить разницу при перемещении мыши и перемещении элемента управления соответственно) это то, что у меня есть сейчас.

публичный частичный класс MainMenu: UserControl { public Point OldMouseLoc; public Point OldWindowLoc; public MainMenu () { InitializeComponent (); }

private void customButton1_MouseDown(object sender, MouseEventArgs e)
{
    OldMouseLoc = MousePosition;
    OldWindowLoc = new Point(this.Location.X + this.Parent.Location.X,this.Location.Y + this.Parent.Location.Y);
    Mover.Start();
}

private void Mover_Tick(object sender, EventArgs e)
{
    Point NewMouseLoc = MousePosition;
    if (NewMouseLoc.X > OldMouseLoc.X || true) { // ( || true is for debugging)
        this.Location = new Point(NewMouseLoc.X - OldWindowLoc.X, this.Location.Y);
        MessageBox.Show(NewMouseLoc.X.ToString() + "   " + OldWindowLoc.X.ToString()); // for debugging
    }
}

}

Теперь причина, по которой у меня возникают проблемы, заключается в том, что MousePosition относительно верхней части экрана, в то время как расположение моих элементов управления относительно верхнего левого угла его родительского окна. Математика, чтобы выяснить координаты для всего, вызывает у меня огромную головную боль, пожалуйста, только исправьте их положение X, чтобы я мог использовать это, чтобы выяснить Y (чтобы я мог научиться самому).

1 Ответ

2 голосов
/ 22 марта 2012

PointToClient должны сделать это за вас.Вы должны вызывать этот метод для родительского элемента управления.

Обновление:

Также рассмотрите немного другой подход.Вам не нужны таймеры или экранные координаты:

    private Point _mdLocation;

    private void customButton1_MouseDown(object sender, MouseEventArgs e)
    {
        _mdLocation = e.Location;
    }

    private void customButton1_MouseMove(object sender, MouseEventArgs e)
    {
        if(e.Button == MouseButtons.Left)
        {
            var x = this.Left + e.X - _mdLocation.X;
            var y = this.Top + e.Y - _mdLocation.Y;
            this.Location = new Point(x, y);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...