Goulasz Geschrieben 7. September 2009 Geschrieben 7. September 2009 Servus Board! Folgendes Problem: Vorweg, ich bin noch relativ neu in der Welt des Programmierens. Ich arbeite grade mit Drag&Drop, da wir sowas später(wenn ichs mal kann^^) in groß für ne Firmenanwendung benötigen. Aktuell sind meine Objekte Bilder in Pictureboxen, einfaches Drag&Drop funktioniert auch, im FileDrop wie im Bitmap-Format. Jetzt möchte ich die Bilder per D&D tauschen(wie eine Art Hütchenspiel). Bisher hab ich das so realisiert, dass ich das neue Bild aus dem e-Parameter des DragEvent-Handlers übernehme und das Bild aus der alten Box durch ein zwischengespeichertes aus einem Platzhalter ersetze. Allerdings funktioniert das so nur für fest definierte Boxen(Beispiel im Code wäre "pictureBox1.Image = Platzhalter.Image;") und nicht für jeden beliebige. Und nun zu meiner Frage: Kann man die Quellbox eines Drag&Drop-Vorganges, also die Box, aus der der Inhalt für den Parameter "e" stammt, direkt ansprechen? Also beispielsweise "Quellbox.Image = Platzhalter.Image". Wenn nein, wie kann man das sonst lösen? Zur Verdeutlichung Code des Events und ein Screenshot des UI: private void Pbox_DragDrop(object sender, DragEventArgs e) //Universal-Handler für Drop-Event in Pictureboxen { PictureBox test = (PictureBox)sender; //PB test = Aktuell behandelte PBox string testname = test.Name; //testname = "Name der Picturebox" if (e.Data.GetDataPresent(DataFormats.FileDrop)) //Wenn das Datenformat des D&D-Events "FileDrop" ist { textBox1.Text = testname + "_DatenDrop"; //Zeige in der Textbox an "Name der Picturebox"_DatenDrop(Nur zu Informationszwecken) string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); //Erstellung eines Stringarrays zum festhalten des Dateipfades foreach (string file in files) test.Image = new System.Drawing.Bitmap(file); //Bild der aktuellen Picturebox wird aus dem Bild, das dem Pfad entspricht, erstellt } else if (e.Data.GetDataPresent(DataFormats.Bitmap)) //Wenn das Datenformat des D&D-Events "Bitmap" ist { test.Image = (Bitmap)e.Data.GetData(DataFormats.Bitmap); //Erstelle das Bild aus den Daten aus "e"(also der übergebene Wert aus der Quellbox) pictureBox1.Image = Platzhalter.Image; //"Box, aus der der D&D-Vorgang gestartet wurde".Image = Platzhalter.Image; textBox1.Text = testname + "_BilderDrop"; //Zeige in der Textbox an "Name der Picturebox"_BilderDrop(Info) } } Danke schonmal im Voraus, Gruß, Zieg0re P.S: Wer Rechtschreib- und Einrückfehler findet, darf sie behalten. Zitieren
Goulasz Geschrieben 8. September 2009 Autor Geschrieben 8. September 2009 Ist das so simpel, dass sich keine Antwort lohnt? Ein Verweis in die richtige Richtung in der MSDN oder sonstwo würde auch reichen. Ich komm da nicht voran irgendwie -.- Vielleicht ´ne neue Klasse erstellen und Boxen automatisch erzeugen? Zitieren
Goulasz Geschrieben 9. September 2009 Autor Geschrieben 9. September 2009 So, nach längerem Basteln und intensiver Hirnschmalz-Verbrennung mit meinem Ausbilder hab ichs doch hinbekommen. Leider gibt es in C# scheinbar keine Möglichkeit, die Quelle eines Drag&Drop-Vorganges über den Parameter "e" direkt zu identifizieren, daher der Umweg über die Variable. Für die, die evtl. ähnliche Probleme haben, hier die Lösung: foreach (Control c in this.Controls) { if (c is PictureBox) { if (c.Name == Boxname) { textBox1.Text = c.Name + " "; ((PictureBox)c).Image = Platzhalter.Image; } } } Paar Worte dazu: Ich definiere eine globale Stringvariable "Boxname", die beim MouseDown-Event den Namen der Picturebox übernimmt, aus der das Quellbild stammt(welches sich nun in "e" befindet). In der Schleife werden erstmal alle Controls der aktuellen Form durchlaufen und nach Pictureboxen durchsucht. Sollten Pictureboxen vorhanden sein, wird deren Name mit dem Namen der Quellbox(enthalten im String "Boxname") verglichen. Wenn das jetzt identisch ist, gibts ne Info über die Textbox und das Quellbild wird korrekt durch das aus dem Platzhalter ersetzt. Funktioniert für alle beliebigen Controls, soweit ich das getestet habe. Gruß, Zieg0re Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.