Таскание объекта мышой
От: abdula  
Дата: 25.09.03 12:46
Оценка:
на форму помещаеться 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
Re: Таскание объекта мышой
От: Sinatr Германия  
Дата: 25.09.03 13:06
Оценка:
Привет!

1) в обработчике LBUTTONDOWN запоминаются текущие координаты, SetCapture(hwnd).
2) в обработчике LBUTTONUP проверяется GetCapture()==hwnd, тогда ReleaseCapture().
3) в обработчике MOUSEMOVE проверяется GetCapture()==hwnd, тогда:
— GetWindowRect(hwnd...)
— ScreenToClient(GetParent(hwnd)...) -> получаешь координаты новой точки
— окно сдвигается на координаты новой точки минус запомненные координаты (т.к. координаты мыши — клиентские)
— текущие координаты изменяюся на текующие (более текущие)..

Кароче это я пытался из winAPI-шной своей проги что-то описать.. Странно, да? Может ты забыл про это самое преобразование в экранные координаты?
---
ПроГLамеры объединяйтесь..
Re[2]: Таскание объекта мышой
От: abdula  
Дата: 25.09.03 13:13
Оценка:
S>Кароче это я пытался из winAPI-шной своей проги что-то описать.. Странно, да? Может ты забыл про это самое преобразование в экранные координаты? Не забыл, и они номано уживались.
Кусок кода для примера можешь привести?
Re[3]: Таскание объекта мышой
От: Walker США  
Дата: 25.09.03 16:22
Оценка:
Здравствуйте, 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;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.