LabVIEWForum.de - Drag&Drop bei Listenfeld

LabVIEWForum.de

Normale Version: Drag&Drop bei Listenfeld
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo,

ich wollte gerne aus einem Listenfeld Zeilen per Drag auswählen und in ein zweites per Drop einfügen. Das ganze funktioniert auch soweit.

Nun wäre es hilfreich, wenn an der Stelle bzw. Zeile, wo ich die gezogene Zeile in dem zweiten Feld einfügen möchte, eine Markierung (z.B. eine Trennlinie) erscheinen würde, damit man zweifelsfrei sehen kann, zwischen welchen vorhandenen Zeilen die neue eingeordnet wird (z.B. gibt es so etwas bei Case-Strukturen im Menü "Cases neu anordnen...").

Weiß jemand, ob es da schon eine vorgefertigte Routine gibt, oder wie man anders so etwas erstellen kann?
Hi,
das würde mich auch interessieren...ich hab's bisher immer nur geschafft, den neuen Inhalt unten dran zu hängen.

Wie hast du's zwischen rein bekommen?

Gruß
Achim
' schrieb:Wie hast du's zwischen rein bekommen?

das war ja eigentlich die leichteste Aufgabe.
Ich verwende eine Event-Struktur, beim Event "Ablegen" im Ziel-Listenfeld erhalte ich links im Ereignisdaten-Knoten die Koordinaten des Mauszeigers im Moment des Events. Über eine Verhältnisrechnung von Listenfeld-Höhe, y- Koordinate der Maus und Zeilenanzahl der Liste habe ich ausrechnen lassen, auf welcher Zeile der Mauszeiger steht und an dieser Stelle in das Array "Objekt-Namen" des Listenfeldes den neuen String eingefügt.Tippen

Natürlich geht das ganze auch einfacher Blush. Auf der Suche nach einer Lösung für obiges Problem bin ich heut drauf gestoßen, daß es eine Methode für Listenfelder gibt, welche die Zeilennummer in Abhängigkeit der Mausposition berechnet.

Funktioniert auch soweit, man muß in beiden Fällen am Ende nur eine Unterscheidung machen, ob die errechnete Zeilennummer größer als die Anzahl der Objektnamen / belegten Zeilen der Liste ist. Wenn ja (also als Beispiel in ein Array von 5 Elementen ein neues an Index 10 einfügen erzeugt einen Fehler), muß als Index die Größe des Arrays übergeben werden, damit das neue Element ans Ende angehängt wird. Wenn nein dann wird die errechnete Zeile als Einfüge-Index übergeben.

Nur dumm ist eben, daß man nicht genau den Übergang zwischen den Zeilen nicht sieht und somit manchmal der String in der falschen Zeile eingefügt wird. Daher wäre eine Markierung nicht schlecht. (Geht ja irgendwie, aber wie?)
' schrieb:Nur dumm ist eben, daß man nicht genau den Übergang zwischen den Zeilen nicht sieht und somit manchmal der String in der falschen Zeile eingefügt wird. Daher wäre eine Markierung nicht schlecht. (Geht ja irgendwie, aber wie?)

Hi,
ich hab das jetzt mal mit der von dir vorgeschlagenen Methode "Point To Row Column" gemacht und auch die Unterscheidung "hintendran oder mittenrein" gleich eingebaut...funktioniert tatsächlich tadellos!

Und: Bei mir (LV8.5) wir der von dir gewünschte Trennstrich (= "Ist-Position") angezeigt! Ich musste nur noch ein "+1" an die ausgegebene Row der genannten Methode machen, dann passt's!

GEIL!

Siehe den Trennstrich auf dem Bild:

[attachment=9836]

Gruß
Achim
' schrieb:ich hab das jetzt mal mit der von dir vorgeschlagenen Methode "Point To Row Column" gemacht und auch die Unterscheidung "hintendran oder mittenrein" gleich eingebaut...funktioniert tatsächlich tadellos!

Und: Bei mir (LV8.5) wir der von dir gewünschte Trennstrich (= "Ist-Position") angezeigt!
OK, ist ja schön, wenn ich Dir helfen konnte und wenn's klappt Lol.

Hab auch bei mir das Inkrement eingefügt, aber das beeinflußt ja nur die Zeilennummer.
Aber der Strich erscheint bei mir nicht.

Vielleicht liegt das Problem ja woanders, denn bei mir erscheint das Verboten-Symbol, auch wenn ich mit der Maus über das Listenfeld fahre. Ich habe aber die Eigenschaft "Ablegen möglich" dieses Listenfeldes aktiviert, und trotzdem verschwindet das Symbol nicht.

Vielleicht liegt's ja daran. Vielleicht verwandelt sich der Cursor von dem Verboten-Symbol außerhalb des Feldes ja in die Trennlinie, wenn er in den Bereich der Listenfeldes kommt.

Aber wie stelle ich das an? Wie geht das bei Dir?
' schrieb:Aber wie stelle ich das an? Wie geht das bei Dir?

Hi,

folgende Einstellungen hab ich an der MultiColumnListbox:

[attachment=9838]


Verwenden tu ich das Event "Drop", so lese ich die Daten:

[attachment=9839]


Bist du jetzt schlauer?

A.
Hallo,

danke, jetzt klappt's bei mir auch.

ich hatte die Eigenschaft "Allow Drag Drop Outside Control"/"Ablegen außerhalb von Elementen möglich" aus dem Frontpanel-Menü so interpretiert, daß dadurch ermöglicht wird, Daten aus der Liste herauszuziehen und außerhalb abzulegen. Noch blöder ist die Formulierung dieser Eigenschaft im Eigenschaftsknoten des Blockdiagramms. Dort heißt das ganze "Ziehen aus Element zulassen". Und da ich das nicht will, habe ich diese Eigenschaft deaktiviert.

[attachment=9842]

Ist halt ziemlich irreführend aus der englischen Version übersetzt. Es müßte dann eher heißen: "Ablegen von Daten von außerhalb des Elements möglich" oder so in der Art.

Danke noch mal für die Info
' schrieb:Hallo,

danke, jetzt klappt's bei mir auch.

ich hatte die Eigenschaft "Allow Drag Drop Outside Control"/"Ablegen außerhalb von Elementen möglich" aus dem Frontpanel-Menü so interpretiert, daß dadurch ermöglicht wird, Daten aus der Liste herauszuziehen und außerhalb abzulegen. Noch blöder ist die Formulierung dieser Eigenschaft im Eigenschaftsknoten des Blockdiagramms. Dort heißt das ganze "Ziehen aus Element zulassen". Und da ich das nicht will, habe ich diese Eigenschaft deaktiviert.

[attachment=36801:_bersetzungsfehler.gif]

Ist halt ziemlich irreführend aus der englischen Version übersetzt. Es müßte dann eher heißen: "Ablegen von Daten von außerhalb des Elements möglich" oder so in der Art.

Danke noch mal für die Info
:offtopic:Wieder mal ein klares Argument für die englische Version von LabVIEWHehe
Auch wenn es nix mit dem Listenfeld zu tun hat wollte ich keinen neuen Thread eröffnen. Habe ein Drag and Drop Prob bei einer Tabelle. Ich möchte Einträge innerhalb der Tabelle verschieben können. Dazu hab ich das im Bild zu sehende VI gebaut. Die Daten die ich mit der Funktion Get Drop Data bekomme sind richtig, aber er fügt sie nicht ein.
' schrieb:Auch wenn es nix mit dem Listenfeld zu tun hat wollte ich keinen neuen Thread eröffnen. Habe ein Drag and Drop Prob bei einer Tabelle. Ich möchte Einträge innerhalb der Tabelle verschieben können. Dazu hab ich das im Bild zu sehende VI gebaut. Die Daten die ich mit der Funktion Get Drop Data bekomme sind richtig, aber er fügt sie nicht ein.

Das liegt wohl daran, dass du "ReplaceArraySubset" verwendet hast...und Replace geht nur, wenn du ein (2D-String-) Array vorher entsprechend groß initialisiert hast!

A.
Seiten: 1 2
Referenz-URLs