Zum Inhalt springen

[C#] Ansprechen von Drag&Drop-Quellen


Goulasz

Empfohlene Beiträge

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.

post-63994-14430448482053_thumb.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...