Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[C#] Ansprechen von Drag&Drop-Quellen

Empfohlene Antworten

Veröffentlicht

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

  • Autor

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?

  • Autor

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.