Приветствую всех!
Я новичек в C# но это пройдет со временем.
Я немогу заставить перемещаться мой System.Windows.Forms.UserControl
по System.Windows.Forms.Panel MyPanel. Подскажите как это сделать ?
В методе UserControl_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
Делаю вот такое присвоение:
this.Location = new Point(e.X,e.Y);
В результате при перемещении мой UserControl нивиден, и появляется хрен знает где
при отпускании мыши.
Где грабли ?
16.08.04 20:00: Перенесено модератором из '.NET' — TK
Здравствуйте, <Аноним>, Вы писали:
А>Делаю вот такое присвоение:
А>this.Location = new Point(e.X,e.Y);
А>В результате при перемещении мой UserControl нивиден, и появляется хрен знает где
А>при отпускании мыши.
А>Где грабли ?
Ой, тут проще сказать, что ты сделал правильно.

Ты присваиваешь локальные координаты одного контрола туда где требуются локальные координаты другого. Потом ты не делаш захват мыши. В обшем, вто тебе пример:
private void UserControl1_MouseMove(object sender, MouseEventArgs e)
{
if (this.Capture)
{
// Преобразуем координаты между контролами.
Point pt = this.Parent.PointToClient(
this.PointToScreen(e.Location));
// Добавляем отступ, чтобы контрол не прыгал.
pt.Offset(-_dragOffset.X, -_dragOffset.Y);
this.Location = pt;
}
}
Point _dragOffset;
private void UserControl1_MouseDown(object sender, MouseEventArgs e)
{
// Если фокус не захватить, то при выходе мыши из контрола
// мышышиные сообщения перестанут приходить.
this.Capture = true;
// Отступ мыши от при начале дрыга.
_dragOffset = e.Location;
}
private void UserControl1_MouseUp(object sender, MouseEventArgs e)
{
// При отмускании мыши нужно освободить захват.
this.Capture = false;
}
... << RSDN@Home 1.1.4 beta 2 >>