Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как перенести текст из одного ListBox в другой, Перемещение выделенного текста 
:(
    Опции темы
vinograd2008
Дата 6.2.2012, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 7.12.2008

Репутация: нет
Всего: нет



Есть два ListBoxa. В одном выделяю текст во второй перемещаю. Как перенести выделенный текст из одного ListBoxа в другой? Нужен какой-нибудь простой пример?
PM MAIL   Вверх
Экскалупатор
Дата 6.2.2012, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: нет
Всего: 24



вроде бы у ListBoxa нету текста(свойства Text), текст лежит в его Items ищи там. вообще самый просто способ это взять тект там где ты его положил. ты же его куда то положил? раз он там есть?
PM MAIL ICQ   Вверх
vinograd2008
Дата 6.2.2012, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 7.12.2008

Репутация: нет
Всего: нет



Цитата(Экскалупатор @ 6.2.2012,  15:40)
вроде бы у ListBoxa нету текста(свойства Text), текст лежит в его Items ищи там. вообще самый просто способ это взять тект там где ты его положил. ты же его куда то положил? раз он там есть?

Да. Вот набросал код который вставляет в первый ListBox элементы из второго, но возникла проблема с выбором нескольких, если выбираю несколько и перетаскиваю в 1 ListBox то элементы вставляются в конец списка не по порядку как это исправить?

Код


 public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            List1.Items.Add("sdfer");
            List1.Items.Add("dxvxcb");

            List2.Items.Add("ergcb");
            List2.Items.Add("rgvca");
            List2.Items.Add("gvca");

            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);
            }

        }

    }


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0697 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.