Wie verschiebe ich ein Steuerelement in mousemove zur Laufzeit?

Ich habe eine WinForm-Anwendung und versuche, eine PictureBox in einem Formular mit zu verschiebenMouseMove Event, aber ich kann nicht herausfinden, was die richtige Berechnung für MouseMove ist. Wenn ich die PictureBox zum ersten Mal benutze, ändert sich ihre Position auf sinnlose Weise, und beim Verschieben der PictureBox wird die Position korrekt verschoben.

Es ist ein PanelnameOuterPanel welches die pictureBox enthältpicBox, hier der Code, den ich benutze:

private void picBox_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        Point p = OuterPanel.PointToClient(MousePosition);
        picBox.Location = this.PointToClient(p);
    }
}

S.: Das Ziel ist das Bewegen des Bildes nach dem Vergrößern, wie bei Windows Photo Viewer

Aktualisieren : ConvertFromChildToForm Methode

private Point ConvertFromChildToForm(int x, int y,Control control)
{
    Point p = new Point(x, y);
    control.Location = p;
    return p;
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage