Drag & Drop در سی شارپ

برای Drag & Drop در سی شارپ یک مثال می زنیم. فرض کنید که می خواهید یک کنترل button را از داخل یک کنترل panel کشیده و در در panel دیگر رها کنید. برای اینکار دو کنترل panel و یک دکمه مانند شکل زیر بر روی فرم قرار دهید :

drag and drop

حال کدهای زیر را وارد کرده و برنامه را اجرا و نتیجه را مشاهده نمایید :

using System.Windows.Forms;

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

            panel1.AllowDrop = true;
            panel2.AllowDrop = true;

            panel1.DragEnter += panel_DragEnter;
            panel2.DragEnter += panel_DragEnter;

            panel1.DragDrop += panel_DragDrop;
            panel2.DragDrop += panel_DragDrop;

            button1.MouseDown += button1_MouseDown;
        }

        void button1_MouseDown(object sender, MouseEventArgs e)
        {
            button1.DoDragDrop(button1, DragDropEffects.Move);
        }

        void panel_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }

        void panel_DragDrop(object sender, DragEventArgs e)
        {
            ((Button)e.Data.GetData(typeof(Button))).Parent = (Panel)sender;
        }
    }
}

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر و اگر سوالی دارید در بخش پرسش و پاسخ مطرح بفرمایید.

  1. آزاده پاسخ دادن

    سلام، از مطالب مفید و روان سایت شما بسیار استفاده کردم، متشکرم که این آموزش ها را قرار دادید.
    با اجازه همه مطالب رو در سیستم خودم ذخیره کردم.
    شاد ، موفق و سلامت باشید.

  2. یونس ابراهیمی پاسخ دادن

    سلام دوست عزیز…ممنون از لطفتون….انشالله کتاب “سی شارپ به زبان ساده” که نسخه کامل همین سایته رو به زودی واسه دانلود میارم

  3. Blueman پاسخ دادن

    سلام ، ممنون از مطالب مفیدتون،
    این قسمت کد را من کپی و اجرا کردم ولی به طور درست اجرا نمی شد.
    از دکمه یک نمونه را به پنل کناری می برد ولی تصویر دگمه در پنل اول باقی می ماند..
    و آیا این عمل یکطرفه است؟ برای من امکان باز گرداندن وجود نداشت.
    با تشکر

    • یونس ابراهیمی پاسخ دادن

      سلام دوست عزیز
      کاملا درست کار می کنه، بنده تست کردم و دو طرفه هست. فقط این نکته رو توجه کنید که باید روی رویدادها تو پنجره properties کلیک کنید تا کنترل کننده رویداد ایجاد بشه، یعنی به صرف کپی کردن کد، کد درست کار نمی کنه