powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# 2010: Drag&Drop не работают, шож такое..
4 сообщений из 4, страница 1 из 1
C# 2010: Drag&Drop не работают, шож такое..
    #38488451
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создал компонент:
UserControl, в нём PictureBox. На PictureBox рисую различные картинки ("объекты", которые пользователь может перетаскивать, хотя пока не может... ).

Задача: Перетаскивать нарисованное (круг, прямоугольник) не только внутри компонента (это легко без DragDrop), а между такими компонентами.

Сложность в решении:
Код: c#
1.
2.
3.
4.
5.
6.
7.
//Класс компонента
private void Картинка_MouseDown(object sender, MouseEventArgs e)
{
                                                //выделенное не работает. Мышь имеет символ зачёркнутого круга
                                                //в любом случае, какой бы DragDropEffect не делал.
    Картинка.DoDragDrop("пусть будут хотя бы строковые данные пока что", DragDropEffects.Copy);
}


соответственно, ни одно событие Drag-Drop не работает,
Свойства AllowDrop у картинки нет, а для UserControl поставил его в true.
Пробовал так:
Код: c#
1.
2.
3.
4.
5.
//Класс компонента
private void Картинка_MouseDown(object sender, MouseEventArgs e)
{
    this.DoDragDrop("пусть будут хотя бы строковые данные пока что", DragDropEffects.Copy);
}


Аналогично - Drag-Drop не отрабатывают, рядом с мышкой перечёркнутый круг.


К перечисленному ещё и событие MouseUp перестаёт отрабатывать!
...
Рейтинг: 0 / 0
C# 2010: Drag&Drop не работают, шож такое..
    #38488518
Sergey S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Одно из теоретических решений (может кто делал на практике и скажет как правильней, самому интересно...)
1. Слои (нужно отслеживать какой рисунок выше, если зажал кнопку, то выделится должен именно верхний.
2. Отслеживать нажатие кнопки мыши и перемещение, тогда перерисовывать нужный объект, но при этом нужно перерисовывать область из которой ушел объект.

Или использовать UserControl, и его такскать, тогда отпадет надобность перерисовки .
Ну и двойной буфер тоже понадобится....
...
Рейтинг: 0 / 0
C# 2010: Drag&Drop не работают, шож такое..
    #38488534
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос в другом. С рисунками всё понятно - по координатам вычислить, ещё как-нибудь.

Я поднял вопрос в технологии Drag&Drop . Почему могут не срабатывать события, почему курсор мыши не принимает внешний вид, описанный в справочной системе ? Почему не срабатывают события Drag, Drop? в чём я могу ошибаться?
...
Рейтинг: 0 / 0
C# 2010: Drag&Drop не работают, шож такое..
    #38489147
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот как я делаю перетаскивание из тривью в листвью.

для тривью
Код: c#
1.
2.
3.
4.
5.
 private void treeViewTest_ItemDrag(object sender, ItemDragEventArgs e)
 {
      is_listview = false;
      treeViewTest.DoDragDrop(e.Item.ToString().Substring(10), DragDropEffects.Copy | DragDropEffects.Move);
 }



для листвью
AllowDrop = True
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
private void listViewSteps_DragEnter(object sender, DragEventArgs e)
{
     //listyiew item
     if (e.Data.GetFormats()[0].Equals("System.Windows.Forms.ListView+SelectedListViewItemCollection"))
     {
            is_listview = true;
            //The data from the drag source is moved to the target.
            e.Effect = DragDropEffects.Move;
            return;
      }
      //treeview item
      if (e.Data.GetDataPresent(DataFormats.Text))
          e.Effect = DragDropEffects.Copy;
      else
        e.Effect = DragDropEffects.None;
 }


private void listViewSteps_ItemDrag(object sender, ItemDragEventArgs e)
{
      listViewSteps.DoDragDrop(listViewSteps.SelectedItems, DragDropEffects.Move);
}

 private void listViewSteps_DragDrop(object sender, DragEventArgs e)
{
        if (!is_listview) //treeview item
        {
            //get a text of a dragged item 
            string str = e.Data.GetData(DataFormats.Text).ToString();
            //get information about hovered item 
             ListViewHitTestInfo hit_info = listViewSteps.HitTest(listViewSteps.PointToClient(new Point(e.X, e.Y)));
             //check position - must be on an item 
             if (hit_info.Location == ListViewHitTestLocations.None) return;
             ListViewItem prev_item = hit_info.Item;
              ListViewGroup group = prev_item.Group;
              int idx = group.Items.IndexOf(prev_item);
             //и так далее
       }
}



но эти компоненты поддерживают Drag-Drop, а что твориться с PictureBox и UserControl не могу сказать.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# 2010: Drag&Drop не работают, шож такое..
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]