2013-04-14 5 views
6

Ich arbeite in Visual Studio 2012 mit C# und ich muss eine Picture Box in eine andere Picture Box ziehen, im Grunde das Ziel Picturebox Image durch das Draggeed Picture Box Bild ersetzen.C# Drag & Drop von einer Picture Box in eine andere

Wie mache ich das?

Bitte seien Sie spezifisch und versuchen Sie, so einfach und so gut wie möglich zu erklären. Ich bin extrem neu in der Programmierung und ein bisschen verzweifelt, also bitte habe Geduld mit mir.

+0

Mögliches Duplikat von: http://stackoverflow.com/questions/1935925/drag-drop-of-a-dynamically-created-shortcut?rq=1 –

Antwort

1

Sie können die Maus eingeben und verlassen Ereignisse, um dies leicht zu tun. Zum Beispiel haben Sie zwei Bildfelder pictureBox1 und pictureBox2 ... Und Sie möchten das Bild aus Bild box1 ziehen und auf Bild box2 tun etwas ähnliches ... dieses

private void pictureBox2_MouseUp(object sender, MouseEventArgs e) 
    { 
     if (a == 1) 
     { 
      pictureBox1.Image = pictureBox2.Image; 
      a = 0; 
     } 
    } 

    private void pictureBox1_MouseEnter(object sender, EventArgs e) 
    { 
     a = 1; 
    } 

wo ‚a‘ ist nur ein Schloss oder Schlüssel, der überprüft, ob die Maus die Steuerung eingegeben hat, an den wir auf das Bild löschen wollen ... hoffen, dass es für mich helped..worked

10

Drag & Drop ist im PictureBox-Steuerelement verborgen. Nicht sicher warum, es funktioniert gut. Die wahrscheinliche Anleitung hier ist, dass es für den Benutzer nicht offensichtlich ist, dass Sie ein Bild auf dem Steuerelement löschen können. Sie müssen etwas dagegen tun, mindestens setzen Sie die BackColor-Eigenschaft auf einen nicht-Standard-Wert, so dass der Benutzer es sehen kann.

Anyhoo, müssen Sie das Ereignis Mousedown auf der ersten picturebox implementieren, so dass Sie es klicken und beginnen Sie zu ziehen:

private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { 
     var img = pictureBox1.Image; 
     if (img == null) return; 
     if (DoDragDrop(img, DragDropEffects.Move) == DragDropEffects.Move) { 
      pictureBox1.Image = null; 
     } 
    } 

Ich nahm an der Sie das Bild bewegen wollte, zwicken notwendig, wenn, wenn das Kopieren war beabsichtigt. Dann müssen Sie die Ereignisse DragEnter und DragDrop auf der zweiten Picturebox implementieren. Da die Eigenschaften ausgeblendet sind, sollten Sie sie im Konstruktor des Formulars festlegen. Wie folgt:

public Form1() { 
     InitializeComponent(); 
     pictureBox1.MouseDown += pictureBox1_MouseDown; 
     pictureBox2.AllowDrop = true; 
     pictureBox2.DragEnter += pictureBox2_DragEnter; 
     pictureBox2.DragDrop += pictureBox2_DragDrop; 
    } 

    void pictureBox2_DragEnter(object sender, DragEventArgs e) { 
     if (e.Data.GetDataPresent(DataFormats.Bitmap)) 
      e.Effect = DragDropEffects.Move; 
    } 

    void pictureBox2_DragDrop(object sender, DragEventArgs e) { 
     var bmp = (Bitmap)e.Data.GetData(DataFormats.Bitmap); 
     pictureBox2.Image = bmp; 
    } 

Dies ermöglicht Ihnen, ein Bild aus einer anderen Anwendung in das Feld zu ziehen. Nennen wir es ein Feature. Verwenden Sie ein Bool-Flag, wenn Sie dies nicht zulassen möchten.

+0

if (img == null) return; Was bewirkt die Rückgabe in dieser Zeile? Es tut mir leid, es ist nur das ist es praktisch mein erstes Mal Programmierung – user2250165

+0

Es verhindert den Absturz des Codes, wenn der Benutzer auf ein Bildfeld klickt, das kein Bild hat. –

+0

ok ok vielen Dank noch ein paar Fragen. Initialisieren der Komponente(); - Was macht das und warum verwenden Sie auch das Zeichen + = statt nur das Zeichen =? – user2250165