vasanthkumarmk Ответов: 4

Элементы управления перемещаются только внутри панели


уважаемый друг,

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

Я хочу перемещать элементы управления только внутри панели, когда я перемещаю мышь.

Пожалуйста, ответьте [удалена срочность]

[edit]крик удален - OriginalGriff[/edit]

OriginalGriff

ТОЛЬКО НЕ КРИЧИ. Использование всех заглавных букв считается криком в интернете и грубостью (использование всех строчных букв считается ребячеством). Используйте правильную капитализацию, если хотите, чтобы вас воспринимали всерьез.

willempipi

Можете ли вы предоставить нам какой-нибудь код и информацию о том, как вы перемещаете элементы управления?

4 Ответов

Рейтинг:
31

Rajesh Varma Buddaraju

Чтобы решить эту проблему, пожалуйста, рассмотрите левое и верхнее значения панели для вашего фрагмента кода,

Может быть, нижеприведенное решение является полным использованием для вас!

if(panel1.Left < e.X)
            Control.Left = e.X;
            if(panel1.Top <e.Y)
            Control.Top = e.Y;


vasanthkumarmk

Здесь ниже я показал код, который я использую, но этот подходит только для левой и верхней стороны (элементы управления не перемещаются за пределы панели), Этот тип не поддерживает правую и нижнюю стороны, обе стороны управления перемещаются за пределы панели. Пожалуйста, дайте мне кодировку для правого и нижнего положения элементов управления, не выходящих за пределы панели.

если (электронная.Кнопка == MouseButtons.Слева)
{
если (pictureBox1.Left + (e.X - x) > 0)
имя picturebox1.Левый += (е,.Х - х);
if (pictureBox1.Top + (e.Y - y) > 0)
имя picturebox1.ТОП += (е,.Г - г);
}

Рейтинг:
27

Rajesh Varma Buddaraju

Сделать панель дно панель справа значения во время выполнения, а затем скорректировать границы.

Надеюсь, вы меня поймали!

Счастливое кодирование:)


vasanthkumarmk

хорошо, спасибо..........

Рейтинг:
15

Rajesh Varma Buddaraju

Мы не можем установить правильные и нижние значения свойств! Эти значения доступны только для чтения, поэтому нам всегда нужно изменять только верхние и левые свойства.

Надеюсь, что приведенный ниже подход будет полезен для вас!

Возьмите 2 панели и поместите их в нижнюю и правую части вашей панели.
установите topBoundary и rightBoundary согласно вашему требованию. Я попробовал этот подход, и он отлично работает.

int topBoundary;
        int rightBoundary;
        private void Form1_Load(object sender, EventArgs e)
        {
            topBoundary = panel1.Bottom - 60;
            rightBoundary = panel1.Right - 100;
        }

        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            checkBox1.Top = e.Y;
            checkBox1.Left = e.X;
        }

        private void panel2_MouseEnter(object sender, EventArgs e)
        {
            checkBox1.Top = topBoundary;
        }

        private void panel3_MouseEnter(object sender, EventArgs e)
        {
            checkBox1.Left = rightBoundary;
        }


vasanthkumarmk

Очень, очень Спасибо за ваш код.....он работает, но я запутался установить границы, Пожалуйста, скажите мне один раз, как я могу установить границы.

Sandeep Mewara

Комментарий от ОП:
Дорогой Динеш,
Я использую приложение windows с использованием C#, у меня есть одно сомнение, позвольте мне объяснить,

Объяснять :
У меня есть одна панель и одна кнопка управления в приложении windows, когда я нажимаю кнопку, я добавил изображение времени выполнения (без использования элемента управления picture box) панели, мне нужно выбрать это изображение времени выполнения,когда я щелкаю мышью этого изображения,и в то же время он может изменить размер (например,преобразовать) это изображение восемь раз вправо, влево, сверху, снизу, сбоку влево, сбоку вправо.

Пожалуйста, дайте мне идеи, как я это делаю. Я пробую это последние 20 дней, но все равно ничего не добился.

Рейтинг:
0

stefan27dk

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



//Исковой давности код////::старт::::

// Mouse Button Left Down
                 if (e.Button == System.Windows.Forms.MouseButtons.Left) // The panel is attached to the mouse and you can move it
                 {


                             //Selected Panel Limited location of Bottom and Right
                             if (this.activeControl.Location.X == Math.Min(Math.Max(activeControl.Right + (e.X - previousPosition.X), 0), activeControl.Parent.Width - activeControl.Width) && this.activeControl.Location.Y == Math.Min(Math.Max(activeControl.Bottom + (e.Y - previousPosition.Y), 0), activeControl.Parent.Height - activeControl.Height))
                             {

                                 int RightX = Math.Min(Math.Max(activeControl.Right + (e.X - previousPosition.X), 0), activeControl.Parent.Width - activeControl.Width);
                                 int BottomY = Math.Min(Math.Max(activeControl.Bottom + (e.Y - previousPosition.Y), 0), activeControl.Parent.Height - activeControl.Height);

                                 activeControl.Location = new Point(RightX, BottomY);

                                 ///!LocationRightPanel.Equals(this.activeControl) && this.activeControl.Bounds.IntersectsWith(LocationRightPanel.Bounds)

                             }


                             //Selected Panel Limited location of LEFT and TOP
                             else
                             {
                                 int LeftX = Math.Min(Math.Max(activeControl.Left + (e.X - previousPosition.X), 0), activeControl.Parent.Width - activeControl.Width);
                                 int TopY = Math.Min(Math.Max(activeControl.Top + (e.Y - previousPosition.Y), 0), activeControl.Parent.Height - activeControl.Height);

                                 activeControl.Location = new Point(LeftX, TopY);

                             }

                 }













//////////-----ПОЛНЫЙ КОД::START:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Forms;

namespace TaskbarTest
{
    public partial class Form1 : Form
    {

        private Control activeControl;
        private Point previousPosition;
        Panel TaskPanel;

       
        public Form1()
        {
            InitializeComponent();
        }







        // ADD Task - Button
        private void add_Task_Button_Click(object sender, EventArgs e)
        {
            AddTask();
        }


        


          // ADD task Method
        private void AddTask()
        {
            TaskPanel = new Panel();//Added task panel
            TaskPanel.Location = new System.Drawing.Point(30, 50);//Added panel Location
            TaskPanel.MaximumSize = new Size(300, 100); 
            TaskPanel.Size = new Size(150, 400); 
            TaskPanel.BackColor = Color.DarkBlue; 
            TaskPanel.Margin = new Padding(200, 200, 200, 200);
            TaskPanel.Padding = new Padding(200);
            TaskPanel.Name = "TaskPanel";
          

            // Event Handlers
            TaskPanel.MouseDown += new MouseEventHandler(TaskPanel_MouseDown);///Added panel Declaring MouseDown
            TaskPanel.MouseMove += new MouseEventHandler(TaskPanel_MouseMove);///Added panel Declaring MouseMove
            TaskPanel.MouseUp += new MouseEventHandler(TaskPanel_MouseUp);///Added panel Declaring MouseUp
            TaskPanel.LocationChanged += new System.EventHandler(TaskPanel_LocationChanged);
            TaskPanel.KeyDown += MovingPanel_KeyDown;
            TaskPanel.MouseClick += new MouseEventHandler(TaskPanel_MouseClick);

            loader_panel.Controls.Add(TaskPanel);// Add the panel to the loader_panel "Workplace"

            activeControl = TaskPanel;//Focused
        }



           // Mouse Down - "On holding the mouse button"
           private void TaskPanel_MouseDown(object sender, MouseEventArgs e)
           {

            activeControl = sender as Control;
            previousPosition = e.Location;// Start position on panel move
            Cursor = Cursors.Hand;

           }




          // Mouse Move
          private void TaskPanel_MouseMove(object sender, MouseEventArgs e)
          {

                    // If it is not sender does not move any panel  "The sender is the panel that owns the current MouseEvent"  
                    if (activeControl == null || activeControl != sender) 
                    {
                        return;//Terminates execution of the method and returns control to the calling method
                    }



                   // Mouse Button Left Down
                   if (e.Button == System.Windows.Forms.MouseButtons.Left) // The panel is attached to the mouse and you can move it 
                   {
                   
                   
                               //Selected Panel Limited location of Bottom and Right 
                               if (this.activeControl.Location.X == Math.Min(Math.Max(activeControl.Right + (e.X - previousPosition.X), 0), activeControl.Parent.Width - activeControl.Width) && this.activeControl.Location.Y == Math.Min(Math.Max(activeControl.Bottom + (e.Y - previousPosition.Y), 0), activeControl.Parent.Height - activeControl.Height)) 
                               {
                              
                                   int RightX = Math.Min(Math.Max(activeControl.Right + (e.X - previousPosition.X), 0), activeControl.Parent.Width - activeControl.Width);
                                   int BottomY = Math.Min(Math.Max(activeControl.Bottom + (e.Y - previousPosition.Y), 0), activeControl.Parent.Height - activeControl.Height);
                              
                                   activeControl.Location = new Point(RightX, BottomY);
                              
                                   ///!LocationRightPanel.Equals(this.activeControl) && this.activeControl.Bounds.IntersectsWith(LocationRightPanel.Bounds)
                              
                               }
                              
                              
                               //Selected Panel Limited location of LEFT and TOP 
                               else
                               {
                                   int LeftX = Math.Min(Math.Max(activeControl.Left + (e.X - previousPosition.X), 0), activeControl.Parent.Width - activeControl.Width);
                                   int TopY = Math.Min(Math.Max(activeControl.Top + (e.Y - previousPosition.Y), 0), activeControl.Parent.Height - activeControl.Height);
                              
                                   activeControl.Location = new Point(LeftX, TopY);
                              
                               }
                   
                   }
 
          }    
        
        

          private void TaskPanel_MouseUp(object sender, MouseEventArgs e)
          {
            activeControl = null;//Disable Control "You can now mouseclick on one dynamic panel to foucus on "Select"
            Cursor = Cursors.Default;
 
          }


          
          private void TaskPanel_LocationChanged(object sender, EventArgs e)
          {

          } 
        
        
           private void MovingPanel_KeyDown(object sender, KeyEventArgs e)
           {

           }
               
        
           private void TaskPanel_MouseClick(object sender, MouseEventArgs e)
           {

           }


 
    }
}