0 امتیاز
سلام ، میخواستم بدونم میشه وقتی که فرم در حال اجرا هست ، کاربر بتونه با اختیار خودش کنترل های روی فرم (مثل textbox و button و... ) رو روی فرم جابجا کنه ؟

2 پاسخ

+1 امتیاز

سلام

این یه سمپل هست واسه حرکت ابجکت ها روی فرم میتونید از روی این تمرین کنید

private int XPosition;
 
       private int YPosition;
 
       private bool CanDrag = false;
 
       private void button1_MouseDown(object sender, MouseEventArgs e)
       {
 
           XPosition = e.X;
 
           YPosition = e.Y;
 
           CanDrag = true;
 
           button1.Cursor = Cursors.SizeAll;
       }
 
       private void button1_MouseMove(object sender, MouseEventArgs e)
       {
 
           if (CanDrag)
 
 
           {
 
               button1.Left += e.X -XPosition;
 
               button1.Top += e.Y -YPosition;
 
           }
       }
 
       private void button1_MouseUp(object sender, MouseEventArgs e)
       {
           CanDrag = false;
 
           button1.Cursor = Cursors.Default;
       }

 

+1 امتیاز

سلام

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsFormsApp16
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            button1.Draggable(true);
            checkBox1.Draggable(true);
        }
    }

    public static class ControlExtension
    {
        // TKey is control to drag, TValue is a flag used while dragging
        private static Dictionary<Control, bool> draggables =
                   new Dictionary<Control, bool>();
        private static System.Drawing.Size mouseOffset;

        public static void Draggable(this Control control, bool Enable)
        {
            if (Enable)
            {
                // enable drag feature
                if (draggables.ContainsKey(control))
                {   // return if control is already draggable
                    return;
                }
                // 'false' - initial state is 'not dragging'
                draggables.Add(control, false);

                // assign required event handlersnnn
                control.MouseDown += new MouseEventHandler(control_MouseDown);
                control.MouseUp += new MouseEventHandler(control_MouseUp);
                control.MouseMove += new MouseEventHandler(control_MouseMove);
            }
            else
            {
                // disable drag feature
                if (!draggables.ContainsKey(control))
                {  // return if control is not draggable
                    return;
                }
                // remove event handlers
                control.MouseDown -= control_MouseDown;
                control.MouseUp -= control_MouseUp;
                control.MouseMove -= control_MouseMove;
                draggables.Remove(control);
            }
        }
        static void control_MouseDown(object sender, MouseEventArgs e)
        {
            mouseOffset = new System.Drawing.Size(e.Location);
            // turning on dragging
            draggables[(Control)sender] = true;
        }
        static void control_MouseUp(object sender, MouseEventArgs e)
        {
            // turning off dragging
            draggables[(Control)sender] = false;
        }
        static void control_MouseMove(object sender, MouseEventArgs e)
        {
            // only if dragging is turned on
            if (draggables[(Control)sender] == true)
            {
                // calculations of control's new position
                System.Drawing.Point newLocationOffset = e.Location - mouseOffset;
                ((Control)sender).Left += newLocationOffset.X;
                ((Control)sender).Top += newLocationOffset.Y;
            }
        }
    }
}

خطوط 81-21 کار اصلی رو انجام میده. من دو کنترل button و checkBox رو روی فرم قرار دادم و توی رویداد Load فرم هم با فراخوانی متد ()Draggable ، کنترل ها این قابلیت روپیدا می کنن که بشه Drag & Drop بشن
 

سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,924 کاربر

دسته بندی ها

...