Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как в C# перетаскивать панель


Автор: Teran 29.5.2006, 13:28
Как можно на языке c# реализовать перетаскивание панельки в пределах другой панельки с одного места на другое ?
  smile  smile   smile 
 
на Delphi это делаетяс всего двумя функциями:
Код

  ReleaseCapture;
  Panel1.Perform(WM_SYSCOMMAND, $F012, 0);
 

Автор: ivashkanet 29.5.2006, 13:43
Вопрос понял не сильно, но...
Цепляешься к событиям Panel.MouseDown и Panel.MouseUp, и двигаешь по событию MouseMove.
P.S. Пример нужен?
  

Автор: Teran 29.5.2006, 13:46
Цитата(ivashkanet @  29.5.2006,  13:43 Найти цитируемый пост)
Пример нужен?

да

Добавлено @ 13:59 
я просто не знаю какими функциями пользоваться 

Автор: ivashkanet 29.5.2006, 14:08
Лови  smile (только что настрочил)
Код

        bool MouseState = false;
        Point PrevMousePos;
        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            PrevMousePos = new Point(e.X, e.Y);
            if (e.Button == MouseButtons.Left) { this.MouseState = true; } 
        }

        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            if (this.MouseState)
            {
                int dx = e.X -PrevMousePos.X;
                int dy = e.Y - PrevMousePos.Y;
                panel1.Location = new Point(panel1.Location.X + dx, panel1.Location.Y + dy);
            }
        }

        private void panel1_MouseUp(object sender, MouseEventArgs e)
        { if (e.Button == MouseButtons.Left) { this.MouseState = false; } }


Добавлено @ 14:09 
Точно так же со всеми остальными объектами  smile  

Автор: Teran 29.5.2006, 14:18
Огромное спасибо за код!

Хочу указать нужную панель через объект но чтото не выходит:
Код

....  
      private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            if (this.MouseState)
            {
                int dx = e.X -PrevMousePos.X;
                int dy = e.Y - PrevMousePos.Y;
                [B](Panel)sender.Location [/B]= new Point((Panel)sender.Location.X + dx, (Panel)sender.Location.Y + dy);
            }
        }
.....


Добавлено @ 14:21 
 smile 
Получилось
нужно просто было скобки добавить:
Код

        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            if (this.MouseState)
            {
                int dx = e.X -PrevMousePos.X;
                int dy = e.Y - PrevMousePos.Y;
                ((Panel)sender).Location = new Point(((Panel)sender).Location.X + dx, ((Panel)sender).Location.Y + dy);            }
        }

 

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