Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 1
Регистрация: 05.08.2011
Сообщений: 102
1

Вставка элементов в конец ListBox по порядку

06.02.2012, 18:46. Показов 1714. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Набросал код который вставляет в первый ListBox элементы из второго, но возникла проблема с выбором нескольких, если выбираю несколько и перетаскиваю в 1 ListBox то элементы вставляются в конец списка не по порядку как это исправить?

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
 
            List1.Items.Add("Финансы");
            List1.Items.Add("Бухгалтерия");
 
            List2.Items.Add("Экономика");
            List2.Items.Add("Бизнес");
            List2.Items.Add("Интернет");
 
            List2.SelectionMode = SelectionMode.Multiple;
 
           PrepareListBoxForDragDrop(List1);
           PrepareListBoxForDragDrop(List2);
        }
 
        private void PrepareListBoxForDragDrop(ListBox listbox)
        {
            List1.AllowDrop = true;
 
            listbox.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(ListboxPreviewMouseLeftButtonDown);
            listbox.PreviewMouseMove += new MouseEventHandler(ListboxPreviewMouseMove);
            listbox.PreviewMouseLeftButtonUp += new MouseButtonEventHandler(ListboxPreviewMouseLeftButtonUp);
            listbox.Drop += new DragEventHandler(ListboxDrop);
        }
 
        private static DependencyProperty DraggingElementProperty = DependencyProperty.RegisterAttached(
    "DraggingElement", typeof(string), typeof(MainWindow), new FrameworkPropertyMetadata(null));
        private static DependencyProperty IsDownProperty = DependencyProperty.RegisterAttached(
            "IsDown", typeof(bool), typeof(MainWindow), new FrameworkPropertyMetadata(false));
        private static DependencyProperty StartPointProperty = DependencyProperty.RegisterAttached(
            "StartPoint", typeof(Point), typeof(MainWindow), new FrameworkPropertyMetadata(default(Point)));
 
        private void ListboxPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            ListBox listbox = (ListBox)sender;
            string s = GetBoundItemFromPoint(listbox, e.GetPosition(listbox));
            if (s != null)
            {
                listbox.SetValue(IsDownProperty, true);
                listbox.SetValue(DraggingElementProperty, s);
                listbox.SetValue(StartPointProperty, e.GetPosition(listbox));
            }
        }
 
        private string GetBoundItemFromPoint(ListBox box, Point point)
        {
            UIElement element = box.InputHitTest(point) as UIElement;
            while (element != null)
            {
                if (element == box)
                {
                    return null;
                }
                object item = box.ItemContainerGenerator.ItemFromContainer(element);
                bool itemFound = !object.ReferenceEquals(item, DependencyProperty.UnsetValue);
                if (itemFound)
                {
                    return (string)item;
                }
                else
                {
                    element = VisualTreeHelper.GetParent(element) as UIElement;
                }
            }
            return null;
        }
 
        private void ListboxPreviewMouseMove(object sender, MouseEventArgs e)
        {
            ListBox listbox = (ListBox)sender;
 
            bool isDown = (bool)listbox.GetValue(IsDownProperty);
            if (!isDown)
            {
                return;
            }
 
            Point startPoint = (Point)listbox.GetValue(StartPointProperty);
 
            if (Math.Abs(e.GetPosition(listbox).X - startPoint.X) > SystemParameters.MinimumHorizontalDragDistance ||
                Math.Abs(e.GetPosition(listbox).Y - startPoint.Y) > SystemParameters.MinimumVerticalDragDistance)
            {
                DragStarted(listbox);
            }
        }
 
        private void DragStarted(ListBox List2)
        {
            List2.ClearValue(IsDownProperty); 
 
            System.Collections.ArrayList selected = new System.Collections.ArrayList(List2.SelectedItems);
            foreach (Object selectedItem in selected)
            {
 
                string draggingElement = selectedItem.ToString();
                DataObject d = new DataObject(DataFormats.UnicodeText, draggingElement);
                DragDropEffects effects = DragDrop.DoDragDrop(List2, d, DragDropEffects.Copy | DragDropEffects.Move);
 
                if ((effects & DragDropEffects.Move) != 0)
                {
 
                    List1.ClearValue(IsDownProperty);
 
                    List2.Items.Remove(draggingElement);
 
                }
            }
        }
 
        private void ListboxDrop(object sender, DragEventArgs e)
        {
            ListBox List2 = (ListBox)sender;
            if (e.Data.GetDataPresent(DataFormats.UnicodeText, true))
            {
                List2.Items.Add((string)e.Data.GetData(DataFormats.UnicodeText, true));
                e.Effects =
                    ((e.KeyStates & DragDropKeyStates.ControlKey) != 0) ?
                    DragDropEffects.Copy : DragDropEffects.Move;
                e.Handled = true;
            }
        }
 
        private void ListboxPreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            ListBox listbox = (ListBox)sender;
            listbox.ClearValue(IsDownProperty);
            listbox.ClearValue(DraggingElementProperty);
            listbox.ClearValue(StartPointProperty);
        }
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            System.Collections.ArrayList selected = new System.Collections.ArrayList(List2.SelectedItems);
            foreach (Object selectedItem in selected)
            {
                List2.Items.Remove(selectedItem);
                List1.Items.Add(selectedItem);
            }
 
        }
 
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.02.2012, 18:46
Ответы с готовыми решениями:

Перенос первых элементов списка ListBox в конец
ниже приведена программа переноса в начало списка последних элементов списка, нужно поменять на...

Перенос первых элементов списка ListBox в конец
ниже приведена программа переноса в начало списка последних элементов списка, во второй вкладке под...

Выбор рандомных элементов из ListBox и вставка их в textBox
Не подскажите как реализовать данную идею? Уже не знаю просто сколько ломаю голову

Вставка значений по порядку
Приветствую! Кто знает как реализовать такую задачу: выбираем все записи (например 200) из...

0
06.02.2012, 18:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.02.2012, 18:46
Помогаю со студенческими работами здесь

Файлы по порядку, listbox
У меня есть строки, я хочу чтобы к каждой строке был txt, а потом в эти строки из ListBox по...

Вывести в Listbox числа от 1 до значения переменной z, по порядку
Здравствуйте! Как можно вывести в Listbox, числа от 1 до переменной z, по порядку ?

Вставка изображения в конец блока
Привет . Есть сайт На сайте идет первый блок по подбору дисков по параметрам . И есть...

Вставка элемента в конец очереди
Добрый вечер. Не подскажете в чём ошибка? Задача: Вставить элемент, указанный в lable2 в конец...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru