c# - पतञ - सिनेरिया आँख ड्रॉप




एक पैनल से दूसरे पैनल पर खींचें और ड्रॉप कैसे करें(कॉपी करें) (2)

मेरे पास एक फार्म पर दो पैनल हैं
एक पैनल में कुछ नियंत्रण होते हैं जैसे बटन या छवियां और दूसरा पैनल रिक्त है मैं 1 पैनल से एक नियंत्रण खींच कर उसे पैनल 2 पर छोड़ना चाहता हूं, लेकिन इसे नियंत्रण की एक प्रति बना लेनी चाहिए, और एक आयत को खींचते समय एक ही आकार के नियंत्रण के रूप में दिखाया जाना चाहिए और जब पैनल 2 में गिरा दिया जाए तो ड्रैग किया गया आकार वहां दिखाई देना चाहिए माउस की स्थिति पर
असल में मैं एक सिम्युलेटर बनाना चाहूंगा जैसे कि चीज इसमें पैनल 1 में कुछ टूल्स हैं और जब कोई पैनल खींचते हैं और पैनल 2 पर छोड़ देता है तो यह माउस की स्थिति में दिखाई देना चाहिए।

भाषा का कोई फर्क नहीं पड़ता C# या VB.NET हो सकता C#


क्या आप ऐसा कुछ करने की कोशिश कर रहे थे?

private void Form5_Load(object sender, EventArgs e)  
{  
    this.panel1.AllowDrop = true;  
    foreach (Control c in this.panel1.Controls)  
    {  
        c.MouseDown += new MouseEventHandler(c_MouseDown);  
    }  
    this.panel1.DragOver += new DragEventHandler(panel1_DragOver);  
    this.panel1.DragDrop += new DragEventHandler(panel1_DragDrop);  
}  

void c_MouseDown(object sender, MouseEventArgs e)  
{  
    Control c = sender as Control;  
    c.DoDragDrop(c, DragDropEffects.Move);  
}  

void panel1_DragDrop(object sender, DragEventArgs e)  
{  
    Control c = e.Data.GetData(e.Data.GetFormats()[0]) as Control;  
    if (c != null)  
    {  
        c.Location = this.panel1.PointToClient(new Point(e.X, e.Y));  
        this.panel1.Controls.Add(c);  
    }  
}  

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

VB.NET

Private Sub Form5_Load(sender As Object, e As EventArgs)
    Me.panel1.AllowDrop = True
    For Each c As Control In Me.panel1.Controls
        c.MouseDown += New MouseEventHandler(AddressOf c_MouseDown)
    Next
    Me.panel1.DragOver += New DragEventHandler(AddressOf panel1_DragOver)
    Me.panel1.DragDrop += New DragEventHandler(AddressOf panel1_DragDrop)
End Sub

Private Sub c_MouseDown(sender As Object, e As MouseEventArgs)
    Dim c As Control = TryCast(sender, Control)
    c.DoDragDrop(c, DragDropEffects.Move)
End Sub

Private Sub panel1_DragDrop(sender As Object, e As DragEventArgs)
    Dim c As Control = TryCast(e.Data.GetData(e.Data.GetFormats()(0)), Control)
    If c IsNot Nothing Then
        c.Location = Me.panel1.PointToClient(New Point(e.X, e.Y))
        Me.panel1.Controls.Add(c)
    End If
End Sub

Private Sub panel1_DragOver(sender As Object, e As DragEventArgs)
    e.Effect = DragDropEffects.Move
End Sub

स्रोत


@ शिम के थोड़ा कोड बदल रहा है यहां अपडेट किया हुआ कोड है जिसमें आपके नियंत्रण की एक कॉपी दूसरे पैनल में रखी जाएगी

Random rnd = new Random();

private void Form5_Load(object sender, EventArgs e)  
{  
    this.panel1.AllowDrop = true;  
    foreach (Control c in this.panel1.Controls)  
    {  
        c.MouseDown += new MouseEventHandler(c_MouseDown);  
    }  
    this.panel1.DragOver += new DragEventHandler(panel1_DragOver);  
    this.panel1.DragDrop += new DragEventHandler(panel1_DragDrop);  
}  

void c_MouseDown(object sender, MouseEventArgs e)  
{  
    Control c = sender as Control;  
    c.DoDragDrop(c, DragDropEffects.Move);  
}  

void panel1_DragDrop(object sender, DragEventArgs e)  
{  
    Control c = e.Data.GetData(e.Data.GetFormats()[0]) as Control;
    // Here, you get a copy of your drag drop button and dynamically new button is created  
    Button btn = new Button();
    btn.Name = "Button" + rnd.Next();
    btn.Size = c.Size;
    if (c != null)  
    {  
        // Add the newly created button to you Panel
        btn.Location = this.panel1.PointToClient(new Point(e.X, e.Y));  
        this.panel1.Controls.Add(btn);  
    }  
}  

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




drag-and-drop