на форму помещаеться panel, на нее еще одна panel и на ней размащаються Label. И Label надо таскать мышой (C#)
Пошел двумя путями:
1. вешал обработчик на перемещении мыша на Label
2. использовал Drag&Drop
по событию MouseDown
1. запоминаеться координата Х (можно и координату Y, но она мне не нужна)
isDragging = true;
2. вызываеться panel1.DoDragDrop( label1, DragDropEffects.Move);
и в методе panel1.DragEnter запоминаеться координата Х и
isDragging = true;
Проблема:
1. private void label_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (isDragging)
{
int iX = 0;
iX = e.X — iOldX;
string a = sender.ToString();
label1.Left = label1.Left + iX;
}
}
2.private void panel1_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
{
int a=0;
iX = e.X — iOldX;
if (isDragging)
{
label1.Left = label1.Left + a;
}
}
при выполнении этих методов объект начинает прыгать, исчезать, и делать все, чтоб не перемещаться за мышой ...
помогите плиз ... неделю уже вешаюсь ...
25.12.03 12:08: Перенесено модератором из '.NET' — AVK
Привет!
1) в обработчике LBUTTONDOWN запоминаются текущие координаты, SetCapture(hwnd).
2) в обработчике LBUTTONUP проверяется GetCapture()==hwnd, тогда ReleaseCapture().
3) в обработчике MOUSEMOVE проверяется GetCapture()==hwnd, тогда:
— GetWindowRect(hwnd...)
— ScreenToClient(GetParent(hwnd)...) -> получаешь координаты новой точки
— окно сдвигается на координаты новой точки минус запомненные координаты (т.к. координаты мыши — клиентские)
— текущие координаты изменяюся на текующие (более текущие)..
Кароче это я пытался из winAPI-шной своей проги что-то описать..

Странно, да? Может ты забыл про это самое преобразование в экранные координаты?
S>Кароче это я пытался из winAPI-шной своей проги что-то описать..
Странно, да? Может ты забыл про это самое преобразование в экранные координаты? Не забыл, и они номано уживались.
Кусок кода для примера можешь привести?
Здравствуйте, abdula, Вы писали:
S>>Кароче это я пытался из winAPI-шной своей проги что-то описать..
Странно, да? Может ты забыл про это самое преобразование в экранные координаты? Не забыл, и они номано уживались.
A>Кусок кода для примера можешь привести?
Esli pomozhet...
Vot u menya naprimer etot kusochek koda v TreeView vydelyaet papku, kotoraya okazyvaetsya pod myshkoj kogda s pomosch'yu Drag'n'Drop chto-nibud' peretyagivaesh v etot TreeView:
private void tvTreeControl_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
{
TreeNode tnNodeOver = tvTreeControl.GetNodeAt(tvTreeControl.PointToClient(new Point(e.X, e.Y)));
if (tnNodeOver != null)
tvTreeControl.SelectedNode = tnNodeOver;
}