Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Visual C++] Перемещение элемента на форме


Автор: memory 5.4.2010, 15:29
Есть форма, на ней - Panel. Мне  нужно мышкой перетаскивать эту панель по форме. В MSDN находила пример, где событие Move используется, чтобы в заголовке формы отобразить ее координаты при перемещении по экрану. Немного изменила под свою задачу :
Код

private: System::Void OnMove(System::Object^  sender, System::EventArgs^  e) {
                 this->Text = String::Format( "Form screen position = {0}", this->panel1->Location );
             }

Результата никакого. Сам обработчик OnClick выглядит следующим образом (тоже скомпилировано из примеров MSDN):
Код

private: System::Void OnClick(System::Object^  sender, System::EventArgs^  e) {
                 this->panel1->BackColor = System::Drawing::Color::IndianRed;
                 this->panel1->Select();
                 Control::OnMove(e);
                 this->Invalidate();
             }

И, естественно, панель никуда не перемещается, т.е. этот код явно неверный. 

Если кто-нибудь сможет подкинуть работающий пример или хотя-бы подсказать, как это все реализовать, буду очень благодарна. Спасибо заранее.

Автор: Fortnox 5.4.2010, 18:51
2 переменные:
Код

bool isPanelMove;
Point mousePosition // координаты панели перед перемещением


В событии панели onMouseDown:
Код

isPanelMoving = true;
panel->BackColor = Color::Red;
mousePosition = e->Location;

В событии панели onMouseMove:
Код

 if (isPanelMoving)
                 {
                    panel->Left += e->X - mousePosition.X;
                    panel->Top += e->Y - mousePosition.Y;
                    this->Text =   String::Format("Panel location is X:{0}; Y:{0}",
                        panel->Location.X, panel->Location.Y);
                 }


В событии панели onMouseUp:
Код

 if (isPanelMoving)
                 {
                    isPanelMoving = false;
                    panel->BackColor = SystemColors::Control;
                 }


Пример прилагаю.

Автор: memory 5.4.2010, 19:25
Спасибо огромное smile Все оказалось куда проще, чем я думала. И не надо было лезть в дебри.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)