| Autor |
Beitrag |
bd.cole
      
Beiträge: 46
Win XP, Vista
C# (VS 2005)
|
Verfasst: Mi 08.08.07 08:47
Hallo, ich bin noch c# Anfänger und bekomm es nicht hin Text von einem ListView in einen Panel per Drag & Drop zu ziehen. Hat da vielleicht einer eine Lösung oder kann mir Irgendwelche Tips geben. Danke
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 08.08.07 10:41
Hallo!
Du braucht drei Ereignisse:
(1) Das MouseMove-Ereignis des TreeView
(2) Das DragEnter-Ereignis des Panel
(3) Das DragDrop-Ereignis des Panel
Außerdem muss die AllowDrop-Eigenschaft des Panels auf True gesetzt werden.
Das MouseMove-Ereignis muss folgendes machen:
(1.1) Prüfen, ob eine Maustaste gedrückt ist (geht über den Parameter e).
(1.2) Prüfen, ob ein Node ausgewählt wurde
(1.3) Wenn das alles stimmt, die DoDragDrop-Methode des TreeView aufrufen. Als data-Parameter nimmst Du den selektierten TreeNode, als AllowedEffects-Parameter alles außer None.
Das DragEnter-Ereignis muss folgendes machen:
(2.1) Prüfen, ob die korrekten Daten auf das Panel gezogen werden und nix anderes. Macht man über e.Data.GetDataPresent(typeof(..)).
(2.2) Wenn die Daten den richtigen Typ haben, den e.Effect auf den erlaubten Effect setzen, ansonsten auf None.
Das DragDrop-Ereignis muss folgendes machen:
(3.1) Nochmal schauen, ob's die richtigen Daten sind (wie in (2.1))
(3.2) Wenn dem so ist, die Daten in einen TreeNode casten und die Text-Eigenschaft verarbeiten.
--> Fertig.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
bd.cole 
      
Beiträge: 46
Win XP, Vista
C# (VS 2005)
|
Verfasst: Do 09.08.07 09:44
Gibts nicht irgendwo ein Programm Beispiel für so ein Problem. Drag & Drop ist doch eine Sache die öfter gebraucht wird. Kann ich denn das Element, dass ich aus dem ListView dragge auf einer bestimmten Position auf meinem panel ablegen? Oder brauch ich da ein anderes Element wie einen panel?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 09.08.07 09:48
bd.cole hat folgendes geschrieben: | | Gibts nicht irgendwo ein Programm Beispiel für so ein Problem. |
Ich habe Dir haarklein geschrieben, was Du tun musst.  Ein bisschen programmieren muss man schon, wenn man programmieren will.
bd.cole hat folgendes geschrieben: | | Kann ich denn das Element, dass ich aus dem ListView dragge auf einer bestimmten Position auf meinem panel ablegen? Oder brauch ich da ein anderes Element wie einen panel? |
Du kannst die Mausposition abfragen und das Panel an der Position erzeugen.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
bd.cole 
      
Beiträge: 46
Win XP, Vista
C# (VS 2005)
|
Verfasst: Do 09.08.07 09:58
Hallo Christian, danke schonmal für die Antwort.
Wegen dem dragdrop auf dem Panel nochmal. Also ich habe einen großen panel auf dem ich mehrere elemente aus meinem Listview dropen will, an bestimmten positionen. kann ein panel mehrere bilder an bestimmten positionen aufnehmen oder muss ich immer einen neuen panel an der mausposition erzeugen?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 09.08.07 10:11
bd.cole hat folgendes geschrieben: | | kann ein panel mehrere bilder an bestimmten positionen aufnehmen |
Ja, kann es. Einfach im Quelltext entsprechend eine PictureBox erzeugen und die Parent-Eigenschaft auf das Panel setzen. So oft Du willst 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
bd.cole 
      
Beiträge: 46
Win XP, Vista
C# (VS 2005)
|
Verfasst: Do 09.08.07 13:04
So habs jetzt ein bisschen anders gemacht. Und zwar mach ich jetzt einen Drag & Drop von meinem ListView in ein DataGrid.
Nur kommt leider ein Fehler: Fehler 1 Der Typ "object" kann nicht implizit in "System.Windows.Forms.ListViewItem" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.)
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| private void listView2_ItemDrag(object Sender, ItemDragEventArgs e) { ListViewItem lvItem; lvItem = ((ListViewItem)(e.Item)); string importantData; importantData = lvItem.Text; DragDropEffects foo; foo = listView2.DoDragDrop(e.Item, DragDropEffects.Copy); MessageBox.Show(foo.ToString()); } private void DataGrid3_DragEnter(object Sender, DragEventArgs e) { e.Effect = DragDropEffects.None; object o; if (e.Data.GetDataPresent(DataFormats.Serializable)) { o = e.Data.GetData(DataFormats.Serializable); if ((o.GetType() == typeof(ListViewItem))) { e.Effect = DragDropEffects.Copy; } } } private void DataGrid3_DragDrop(object Sender, DragEventArgs e) { string message; ListViewItem lvItem; lvItem = e.Data.GetData(DataFormats.Serializable); message = ("The drop text is: " + lvItem.Text); MessageBox.Show(message); } |
kann mir einer den Fehler sagen, den ich gemacht hab? Danke
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 09.08.07 13:15
Hallo!
Der Fehler ist doch eigentlich selbst erklärend.
Richtig ist, das hatte ich übersehen, das ItemDrag-Event anstatt des MouseMove-Event zu nehmen. Alles andere ist deutlich komplizierter, als ich das geschrieben habe. Insbesondere im ItemDrag-Event reicht eigentlich der Aufruf von DoDragDrop.
Wie kommst Du auf DataFormats.Serializable? Ich hab bei GetDataPresent nicht umsonst das "typeof" mit rein geschrieben  Du musst nur noch überlegen, welcher Type es denn sein soll.
Grüße
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
bd.cole 
      
Beiträge: 46
Win XP, Vista
C# (VS 2005)
|
Verfasst: Di 14.08.07 08:36
Danke erstmal Christian für die ganzen Antworten.
Hab das mit dem ListView Text auf Panel hinbekommen. Jetzt wollt ich aus einem ListView nur die jeweils Selektierten Bilder aus der Imaglist draggen. Aber wenn ich das mit DoDragDrop(SelectedItem, DragDropEffects.Copy) usw weiter mach, merkt er schon im DragEnter bei der Typüberprüfungen dass es kein Bild ist. Wie übergebe ich denn nur das Bild? Bei einem Label kann ich ja z.B. DoDragDrop(label.image,....) machen. geht das irgendwie beim ListView auch?
|
|