Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« : 24-08-2009 16:59 » |
|
понадобилась такая штука - перетащить мышью элемент из одного listBox в другой (на одной форме)
включил свойство AllowDrop. В обработчике нажатия мыши запускаю lbx_shop1_content.DoDragDrop(lst1.Items[0 ],DragDropEffects.Move|DragDropEffects.Copy);
появляется курсор - зачёркнутый кружок, однако лист - приёмник никакой реакции после бросания на него элемента не рожает (
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #1 : 24-08-2009 18:45 » |
|
Алексей1153++, а ты Drop в приёмнике запрограммировал?
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 24-08-2009 18:56 » |
|
так сообщение то не вызывается для приёмника, как я его запрограммирую ? Или я что то пропустил
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #3 : 25-08-2009 15:41 » |
|
так и не смог разобраться ( Вот прилагаю болванку, где хочется поймать сообщение DragDrop, когда из левого списка перетаскивается элемент в правый список
|
|
« Последнее редактирование: 26-08-2009 15:44 от Алексей1153++ »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #4 : 26-08-2009 09:26 » |
|
Лёшка, дык ёлы палы! (ну если олифишь тады звиняй). Ты курсор зачем запер? Ты бы им ещё на кнопки понажимал! Курсор управляется эффектами: //левый список - начинаем перетаскивание private void lbx_shop1_content_MouseDown(object sender,MouseEventArgs e) { ((ListBox)sender).DoDragDrop(((ListBox)sender),DragDropEffects.All); }
//правый список - меняем цвет на розовый, когда над ним курсор private void lbx_shop2_content_DragEnter(object sender,DragEventArgs e) { ((ListBox)sender).BackColor=Color.Pink; e.Effect = DragDropEffects.Copy; }
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #5 : 26-08-2009 09:46 » |
|
понятно ) в толстой книжке про это ничего нету. А оно, казывается, через ё делается
Дома опробую )
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #6 : 26-08-2009 10:30 » |
|
((ListBox)sender).BackColor=Color.Pink; В данном случае так, но если в D&D операции участвуют разные объекты, то по-хорошему надо писать: if(sender is ListBox) { ((ListBox)sender).BackColor=Color.Pink; } или же ListBox listBox = sender as ListBox; if(listBox != null) { listBox.BackColor=Color.Pink; }
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #7 : 26-08-2009 10:40 » |
|
учту ) Я думал про такую проверку, но пока парился над дропом, поэтому не искал пока ещё, как сделать проверку
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 26-08-2009 15:44 » |
|
вот как получилось )
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #9 : 26-08-2009 16:41 » |
|
а как задать элементу списка пользовательские данные, то есть, имеется в виду:
в списке - названия товаров, их тексты видно. А каждому элементу сопоставлен ID товара (так же, как это можно делать в апишном ComboBox )
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #10 : 26-08-2009 18:29 » |
|
всё, догадался ))) //элемент списка class listelem:object { public int good_id=0;//тип товара public string good_name="";//имя товара public int good_count=0;//количество
public listelem(int id,string name,int count) { good_id=id; good_name=name; good_count=count; }
public override bool Equals(object obj) { if(this==null || obj==null)return false; return (obj.Equals(this)); }
public override int GetHashCode() { return 0; }
public override string ToString() { if(good_name==null) { return "NULL"; } else { return good_name+" , "+good_count.ToString()+"шт."; } }
}
|
|
« Последнее редактирование: 26-08-2009 18:32 от Алексей1153++ »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #11 : 26-08-2009 20:38 » |
|
Лёш, сиплюснотому (айпишному) ItemData соответствует свойство Tag, ему можно присвоить всё, что есть object.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #12 : 27-08-2009 03:51 » |
|
ItemData я не пользовался, всё сделал через свой класс, производный от object
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #13 : 27-08-2009 06:19 » |
|
Это был ответ на вопрос: а как задать элементу списка пользовательские данные, то есть, имеется в виду:
в списке - названия товаров, их тексты видно. А каждому элементу сопоставлен ID товара (так же, как это можно делать в апишном ComboBox )
Те свойству Tag можно присвоить ЛЮБОЙ объект. зы Конечно можно и так сделать, теперь это уже специальный Combobox.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #14 : 27-08-2009 06:29 » |
|
ну со своим классом даже удобнее, там ведь не только ID можно хранить )
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #15 : 27-08-2009 07:13 » |
|
Леш, забудь. Я просто делал такое для ListView
ListViewItem lvi = myListView.Items.Add("12345"); lvi.Tag = myObject;
На нормальном языке это было SetItemData с указателем.
С "нормальным" комбобоксом я делал так. Создавал объект какого либо класса (с ID и ещё кучей других полей, короче всё что тебе надо) и присваивал указателю полю ItemData каждого элемента списка комбобокса cmbMy.SetItemData(i,pMyObg); Оказывается у додиезного комбобокса у элементов списка нет полей, у них ваще ничего нет. Те надо сделать буферный объект с текстом и объектом.
Собственно говоря, почему я против непосредственного присваивания объектов. Ты подготавливаешь объект и настраиваешь его ToString. Допустим она возвращает Имя Фамилия для отображения в гриде. Теперь тебе надо сделать комбобокс выбора сотрудников для этого достаточно фамилии, тем более что нужна сортировка. Возникает дилема, ведь твой сомбобокс будет вызывать ToString.
Поэтому буферный объект с двумя полями (string Name и object Tag) и ToString имхо лучшее решение.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #16 : 27-08-2009 07:25 » |
|
С "нормальным" комбобоксом я делал так. Создавал объект какого либо класса (с ID и ещё кучей других полей, короче всё что тебе надо) и присваивал указателю полю ItemData каждого элемента списка комбобокса cmbMy.SetItemData(i,pMyObg);
ну я так же ) Допустим она возвращает Имя Фамилия для отображения в гриде. Теперь тебе надо сделать комбобокс выбора сотрудников для этого достаточно фамилии, тем более что нужна сортировка. Возникает дилема, ведь твой сомбобокс будет вызывать ToString.
ну у меня такого не будет - выберут товар, а в элементе есть мембер с ID в базе
|
|
|
Записан
|
|
|
|
|