Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
2 / 2 / 0
Регистрация: 09.09.2010
Сообщений: 221

Drag&Drop, возможность перемещать элементы по форме

09.09.2010, 17:45. Показов 3632. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, я вот столкнулся с такой проблемой: мне в программе надо сделать так, чтобы можно было перемещать элементы, например кнопки. То есть надо реализовать простенький драг&дроп.
Пишу такой код:
C++
1
2
3
4
private: System::Void button_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e)
             {
             this->button->DoDragDrop(this->button, DragDropEffects::Move);
             }
Все компилится, но не работает. Нашел в инете, что надо использовать вначале это функцию DragAcceptFiles()
Пробовал так:
C++
1
2
Form^ form=gcnew Form1;
::DragAcceptFiles(form->Handle, true)
и так:
C++
1
::DragAcceptFiles(this->Handle, true);
Выдает ошибку:
1>c:\documents and settings\admin\рабочий стол\vc++\Form1.h(528) : error C2664: DragAcceptFiles: невозможно преобразовать параметр 1 из 'System::IntPtr' в 'HWND'
1>Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен

Что не так? И если не сложно, то можно на примерах?
Пишу на Visual c++ 2008 express
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.09.2010, 17:45
Ответы с готовыми решениями:

Drag&Drop в MS Visual Studio
Есть задача. Нужно создать игровое поле 4х4, и реализировать перетаскивание обэктов(игрових фишек). В кого какие идеи???

Предоставить возможность пользователю перемещать картинки с использованием механизма «drag and drop»
Расположить в окне несколько картинок. Предоставить возможность пользователю перемещать картинки с использованием механизма «drag and drop»...

Привязать возможность Drag&Drop к ниспадающим менюшкам
Здравствуйте, уважаемые. В общем дело такое - есть выпадающие меню с пунктами (при наведении на менюшку она раскрывается), нужно сделать...

10
 Аватар для pettson
214 / 117 / 2
Регистрация: 04.05.2010
Сообщений: 185
09.09.2010, 17:57
Да у меня тоже такая проблема!
Если кто знает отпишитесь!
0
3 / 3 / 1
Регистрация: 11.05.2010
Сообщений: 45
28.09.2010, 11:16
У меня динамически создаются несколько кнопок и их можно таскать по форме как в редакторе.Но у меня сделано без драг енддропа, типа нажал на кнопку и перемещаешь, если надо, напишите, и выложу весь код
Часть кода здесь
https://www.cyberforum.ru/cpp-... 69499.html
0
0 / 0 / 0
Регистрация: 27.09.2010
Сообщений: 16
28.09.2010, 13:25
xTANATOSx я посмотрел твою тему я тоже делаю что то такое, тоже масив кнопк со событиями, также мне надо переместить элементы не важно драгдроп, только чтобы мышью. Если можно выложи код, буду благодарен.
0
3 / 3 / 1
Регистрация: 11.05.2010
Сообщений: 45
28.09.2010, 21:58
При нажатию на батон2 создаются кнопки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {       
array<System::Windows::Forms::Button^>^ msv = gcnew array<System::Windows::Forms::Button^>(5);
for(int i = 0; i < msv->Length; i++)
{
        msv[i] = gcnew Button();
    msv[i]->Name = L"msv"+i.ToString();
        msv[i]->Size = Drawing::Size(75, 23);
        msv[i]->Text = i.ToString();
        msv[i]->Location = System::Drawing::Point(90, 90 + 40 * i);
        Controls->Add(msv[i]);
panel1->Controls->Add(msv[i]);//у меня они на панеле, если у тебя просто на форме, эту строчку удали
msv[i]->MouseMove += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::button3_MouseMove);
msv[i]->MouseUp += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::button3_MouseUp);
msv[i]->MouseDown +=gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::button3_MouseDown);
        
}}
Добавлено через 5 минут
//дальше функции(button3_MouseDown button3_MouseUp button3_MouseMove) которые делают так, что б можно было таскать кнопки
C++
1
2
3
4
5
6
private: System::Void button3_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
             fl=1;
         }
private: System::Void button3_MouseUp(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
             fl=0;
         }
суть этих 2 функций в том, что б сказать нажата кнопка, или нет через переменную fl

C++
1
2
3
4
5
6
7
8
9
10
private: System::Void button3_MouseMove(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
if (fl==1)
                                {
 
                                        System::Drawing::Point mis (Cursor->Position.X,Cursor->Position.Y);
                                        mis=panel1->PointToClient(mis); //если у тебя на форме то пиши  mis=PointToClient(mis);
                                       // mis=System::Drawing::Point(mis.X,((System::Windows::Forms::Button^)sender)->Location.Y); эта строчка тебе не нужна, она делает, что б тягать можно было только горизонтале
                                        ((System::Windows::Forms::Button^)sender)->Location = mis;
 
                                }
Добавлено через 5 минут
Если потом нужно будет получить доступ к свойству кнопок то делай так
for(int i = 0; i <Количества созданых кнопок; i++)
{
Controls["msv"+i.ToString()]->Text = "Tralala";
}

Добавлено через 2 минуты
P.S.Переменная fl объявляться так
C++
1
2
3
4
5
6
using namespace System::Data;
using namespace System::Drawing;
using namespace std;
using namespace System::IO;
using namespace System::Runtime::InteropServices;
int fl=10;
Типа глобально, после твоих using namespace
1
0 / 0 / 0
Регистрация: 27.09.2010
Сообщений: 16
29.09.2010, 11:30
спасибо xTANATOSx. но у меня число кнопк не известно, их число задается во время работы программы, как тогда создать array кнопок.
0
2 / 2 / 0
Регистрация: 09.09.2010
Сообщений: 221
29.09.2010, 15:42  [ТС]
Спасибо огромноее)
Только один вот вопрос:
C++
1
2
System::Drawing::Point mis (Cursor->Position.X,Cursor->Position.Y);
mis=panel1->PointToClient(mis);
Что такое 'mis', откуда и где применяется?
0
0 / 0 / 0
Регистрация: 27.09.2010
Сообщений: 16
30.09.2010, 14:37
Getter mis это переменное типа System:rawing::Point, в котором сохраняются координаты мыши Cursor->Position.X и Cursor->Position.Y. это переменное задается именно этими строками
C++
1
2
3
4
5
....
...
System::Drawing::Point mis (Cursor->Position.X,Cursor->Position.Y);
...
...
потом его значение передается в ((System::Windows::Forms::Button^)sender )->Location,
но все кнопки находятся в panel1 следовательно значение задаются начиная с левого верхнего угла panel1, но в mis находятся значения считанные с левого верхнего угла формы, а не panel1, так вот panel1->PointToClient(mis) преобразует значение так как нам и надо.

Добавлено через 5 минут
на счет смайла я не виноват хотел написать System:rawing::Point. тоесть
C++
1
System::Drawing::Point
0
2 / 2 / 0
Регистрация: 09.09.2010
Сообщений: 221
30.09.2010, 16:34  [ТС]
Спасибо
0
3 / 3 / 1
Регистрация: 11.05.2010
Сообщений: 45
03.10.2010, 13:45
Вместо
C++
1
array<System::Windows::Forms::Button^>^ msv = gcnew array<System::Windows::Forms::Button^>(5);
Юзай
C++
1
2
int n;//обяви там же где и fl
array<System::Windows::Forms::Button^>^ msv = gcnew array<System::Windows::Forms::Button^>(n);
0
0 / 0 / 0
Регистрация: 27.09.2010
Сообщений: 16
05.10.2010, 17:56
ну да, логично, я сперва тоже так подумал но например
C++
1
2
int a;
int m[a];
здесь такой трюк не работает, и думал что ситуация такая же, и даже не попробовал.
но оказывается работает . еще раз спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.10.2010, 17:56
Помогаю со студенческими работами здесь

Drag & Drop на форме
Здравствуйте Я опять к за советом. Проблема вот в чем: Есть форма на ней десять Text1(i) и Label, хочу сделать так чтобы когда я...

Drag&Drop в модальной форме
Всем добра читающие. Помогите разобраться. Хочу реализовать Drag &amp; Drop (DD) но почему то не хочет работать в дочерней форме. Когда...

Как осуществить функцию drag&drop на форме во время отладки?
Нужно разместить на форме несколько combobox'ов и после отладки их нужно будет передвинуть на предполагаемые для них места на объекте image...

Как организовать перетаскивание (drag&drop) границы таблицы на форме?
Здравствуйте! Подскажите пожалуйста как организовать перетаскивание (drag&amp;drop) границы таблицы на форме?

Как нарисовать круг который потом можно перемещать (drag and drop)?
Т.е. просто форма (например какой-нибудь canvas из HTML 5). На форме рисуется круг, который можно свободно перемещать по форме путем drag...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru