| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > перетаскивание по форме |
| Автор: larinva 7.9.2010, 08:48 | ||||
| Всем привет! подскажите как в этом коде реализовать перетаскивание картинки по форме с Label и тому подобными контролами все понятно а вот с картинкой у меня затруднение Form2
Form1
Суть кода из Form2 на Form1 добавляется картинка и ее нужно двигать по форме. Помогите очень нужно |
| Автор: larinva 7.9.2010, 10:32 |
| кто нибудь отзовитесь |
| Автор: CYBERDREAM 7.9.2010, 11:15 |
| что то не пойму каким образом перетаскиванеи происходит |
| Автор: larinva 7.9.2010, 11:18 |
| как раз и нужно добавить в этот проект перетаскивание |
| Автор: CYBERDREAM 7.9.2010, 11:33 |
| а зачем переопределен онпаинт? может засадить картинку в PictureBox лучше? Суть описана тут http://blog.ninethsense.com/move-a-control-with-mose-on-form/ |
| Автор: larinva 7.9.2010, 11:57 |
| онпайнт переопределен для того чтобы добавлять картику из form2 на form1. Я знаю как перемещать кнопки листбоксы и тому подобные контролы, проблема у меня именно в перемещении картинки которую добавляю с form1 на form2 |
| Автор: CYBERDREAM 7.9.2010, 12:31 |
| для этого переопределять думаю не обязательно. А в чем конкретно проблема? |
| Автор: gambit 7.9.2010, 12:35 |
| larinva, 1. загнать картинку в свой класс, которому передавать координаты клика мыши, а он будет определять попал ли клик именно по картинке. 2. Держать в Form1 2 переменных типа Point (левый верхний и нижний правый угол картинки), и смотреть попадает ли мышь в данный диапазон. Я бы пошел по первому пути, ибо он расширяем (например в дальнейшем надо будет поворачивать картинку, тогда надо будет добавить один метод в свой класс, а не городить непонятные действия в коде формы). Если надо, то через пол часика накидаю пример |
| Автор: larinva 7.9.2010, 12:52 |
| Отлично gambit пример нужен |
| Автор: Fortnox 7.9.2010, 13:53 | ||
| Время было, набросал пример. Наш PictureBox:
И небольшой пример. |
| Автор: larinva 7.9.2010, 14:01 |
| если не сложно gambit скинте тоже примерчик |
| Автор: CYBERDREAM 7.9.2010, 14:20 |
| в итоге используется то же самое что и по ссылке было. Fortnox, по ходу вариант этот не подойдет) от PictureBox отказался автор) |
| Автор: larinva 7.9.2010, 14:22 |
| да ты прав CYBERDREAM через PictureBox не подходит |
| Автор: CYBERDREAM 7.9.2010, 14:23 |
| larinva, колись, в чем проблема то, что именно не получается? Ты так и не ответил на мой вопроис |
| Автор: larinva 7.9.2010, 14:40 |
| CYBERDREAM прикрепил проект. Нужно реализовать перетаскивание роз по форме в этом у меня и заключается проблема |
| Автор: gambit 7.9.2010, 14:44 |
| по нажатию на кнопку на второй форме, добавляется 5 картинок на первую. Все можно двигать. В целом можно все это оптимизировать, доделать, что бы при клике по мышке, левый верхний угол картинки не прыгал под мышь. Так же не реализована подпись под картинкой, но это тебе пример как легко данный подход расширять. Что бы добавить подпись под картинкой, надо в классе картинки завести переменную стринг, этот стринг принимать через конструктор и выводить в методе Draw. |
| Автор: gambit 7.9.2010, 14:49 |
| larinva, совет: никогда не оставляй имена контролов по умолчанию. В том проекте который я прикрепил, я этим тоже грешу, но грешу в меру, и это все равно пример, который посмотрится и удалиться. А у тебя проект, который тебе расширять и сопровождать - сейчас в нем 2 формы и один класс, а уже нихрена не понятно что и куда. |
| Автор: CYBERDREAM 7.9.2010, 15:02 |
| в итоге суть то таже) по ходу автор не мог понять как отследить нажатие на изображение |
| Автор: larinva 7.9.2010, 15:04 | ||
| Сп-бо за совет gambit я стараюсь давать контролам понятные имена этот проект тестовый я в нем отрабатываю, что нужно и потом переношу в настоящий делаю это для того чтобы в нормальном проекте не нахерачить т.к еще мало опыта в программировании. И отдельное сп-бо за примеры и помощь с меня + Добавлено @ 15:06 подскажите CYBERDREAM как это сделать
|
| Автор: Fortnox 7.9.2010, 15:07 |
| CYBERDREAM, уже понял). Значит пойдем другим путем. larinva, дело в том, хоть вы и создаете элементы управления, и размещаете их. После, судя по коду, вы попросту рисуете картинку и текст поверх элемента. Логичнее было бы, как вариант, размещать картинку и текст внутри элемента управления и, либо рисовать их, либо поместить элементы, тот же PictureBox (для картинки) и Label (для текста). Немного подправил ваш проект, чтобы показать наглядно, что я имел ввиду. |
| Автор: CYBERDREAM 7.9.2010, 15:09 | ||
так ведь уже сделано, у класса MyPicture определен методо IsMe вот он и проверяет кликнул ты в нем или нет.
Добавлено через 2 минуты и 50 секунд larinva, значит проблема у тебя была именно в этом, определить куда кликнул. Про это я тебя и спрашивал) |
| Автор: larinva 7.9.2010, 21:29 |
| Знаю, что можно добавлять через контролы как в примере у Fortnox, но не катит потому, что подпись к картинкам обрезается размерами котрола я потому и сделал так а своем примере!!!! |
| Автор: CYBERDREAM 7.9.2010, 23:02 |
| ну я думаю можно было и так реализовать, было бы желание) ну да ладно. Главное работает "Мы не ищем легких путей, нам лень" |
| Автор: larinva 8.9.2010, 08:54 |
| Сп-бо всем кто откликнулся, Примеров много буду разбираться. Думаю что тему можно закрывать |
| Автор: larinva 8.9.2010, 22:35 |
| Все понятно, но при добавлении картинок на panel они перестают двигаться че за хрень с моими кривыми руками. Пришлось продолжить тему, если еще не устали от моей глупости подскажите |
| Автор: CYBERDREAM 8.9.2010, 22:57 |
| Доброй ночи) Думаю ты таки не уяснил суть событий. В исходниках gambit'a форма подписана на события MainForm_MouseMove, MainForm_MouseUp, ... и прочая ересь. Теперь же у тебя картинки на панели, так что нужно их подписать на эти же события, а форму можно отписать. (В PropertyWindow в закладке события) Добавлено через 1 минуту и 7 секунд либо вручную в дизайнере) это позапористее |
| Автор: larinva 8.9.2010, 23:04 | ||
И тебе доброй ночи CYBERDREAMщас попробую
|
| Автор: CYBERDREAM 8.9.2010, 23:18 |
| см. Аттач. для формы убираешь ненужные подписки на события, а на панели устанавливай |
| Автор: larinva 8.9.2010, 23:31 |
| делал так с примером от gambit никуя не работает ((((( |
| Автор: CYBERDREAM 9.9.2010, 06:53 |
| Вариант с панелью |
| Автор: larinva 9.9.2010, 08:37 |
| За возню со мной + тебе CYBERDREAM, Может кто подскажет что нужно читать чтобы не задавать такие вопросы? Или на начальном этапе у всех так? |
| Автор: larinva 9.9.2010, 10:14 |
| А что делать с мерцанием CYBERDREAM? если не сложно |
| Автор: CYBERDREAM 9.9.2010, 12:23 |
| На начальном этапе я бы почитал книжку. Я читал Троелсена. Хотя и нудновато местами. Остально все прийдет) А на счет мерцания пока не скажу, надо обмозговать)) чуть позже освобожусь Добавлено через 22 секунды а где плюсик)))))))) |
| Автор: larinva 9.9.2010, 12:38 |
| За + CYBERDREAM извиняюсь исправился ))) |
| Автор: CYBERDREAM 9.9.2010, 18:07 |
| Боюсь придется создать свой контрол) В аттаче таковой, отличие от твоего то, что прорисовка происходит в onpaintBackground ну и коллекцию изображений я тоже внес в контрол. Добавлено через 2 минуты и 18 секунд кстати без двойной буферизации никак, так что http://msdn.microsoft.com/ru-ru/library/system.windows.forms.control.setstyle.aspx было использовано |
| Автор: larinva 9.9.2010, 22:04 |
| а по другому избавиться от мерцания и как? |
| Автор: CYBERDREAM 9.9.2010, 22:06 |
| а чем не устраивает с контролом своим? По другому никак, ведь перекрыть метод OnPainBackGround никак. Сделай контрол и не парься) Добавлено через 53 секунды GDI всегда ведь тормознутый был и будет) переходи на WPF |
| Автор: larinva 9.9.2010, 22:15 |
| а что WPF действительно хорош? |
| Автор: CYBERDREAM 9.9.2010, 22:19 |
| http://ru.wikipedia.org/wiki/Windows_Presentation_Foundation и все же, как прогресс с панелью? |
| Автор: larinva 9.9.2010, 22:27 |
| а с литературой на русском похоже проблемка или я ошибаюсь Добавлено через 1 минуту и 13 секунд думаю что делать с панелью |
| Автор: CYBERDREAM 9.9.2010, 22:37 |
| на счет панели: контрол, который я сделал, можно унаследовать от Panel. И вот у тебя получится расширенный Panel для своих нужд без мерцаний. Иначе не реализуешь - такая уж наша судьба грешная. Да ничем это ведь тебе не помешает, или нет? На счет WPF WPF. Windows Presentation Foundation в .NET 3.5 с примерами на C# 2008 для профессионалов в сети полно сурсов для закачки. Если не найдешь, напишу в личку - незнаю можно ли выкладывать линки. На днях буду покупать эту книгу. Но все же тебе нужно почитать и про основы шарпа, прежде чем переходить к WPF - на мой взгляд, а то без базы сложновато будет |
| Автор: larinva 9.9.2010, 22:46 | ||
нашел
а на счет основ читаю тока чет с трудом дается читаю вроде все понятно,а как начинаю что - то делать то как баран на новые ворота смотрю (((( |
| Автор: CYBERDREAM 10.9.2010, 09:14 |
| так как с контролом, вариант подошел? |
| Автор: larinva 10.9.2010, 09:36 |
| я еще не пробовал чет с утра загружен как тока так сразу отпишусь ))) |