Seite 1 von 1
Listener für ein Tabellen Kontrollfeld (GridControl)
Verfasst: Mi, 14.09.2011 11:56
von slotty
Hallo miteinander,
seit geraumer Zeit versuche ich unter OO3.3m20 die Selektionsänderung in einem Tabellen Kontrollfeld mitgeteilt zu bekommen um anschließend davon abhängige Formularobjekte anzupassen.
Das Tabellenkontrollfeld TK1 befindet sich dabei in dem Formular frmTabkont.
Als Lösungsansatz habe ich einen Listener in folgender Form angemeldet:
Code: Alles auswählen
Global vSelChangeListener
Global vSelChangeBroadCast
Dim sPrefix$
Dim sService$
dim vForm as object
sPrefix = "sel_change_"
sService = "com.sun.star.view.XSelectionChangeListener"
vForm = ThisComponent.DrawPage.Forms.GetByName( "frmTabkont" )
vSelChangeBroadCast = vForm.getbyName("TK1")
vSelChangeListener = CreateUnoListener(sPrefix, sService)
vSelChangeBroadCast.addSelectionChangeListener(vSelChangeListener)
Ferner existieren die Subs:
Code: Alles auswählen
Sub sel_change_disposing(vEvent)
Sub sel_change_selectionChanged(vEvent)
Die Anmeldung des Listeners erfolgt fehlerfrei. Leider wird aber bei einer Änderung der selektierten Zeile kein Aufruf der entsprechenden Sub durchgeführt.
Für Ideen oder weiterführende Debuggingmöglichkeiten wäre ich dankbar.
Gruß
Slotty
Moderation,4: CODE tags gesetzt
Re: Listener für ein Tabellen Kontrollfeld (GridControl)
Verfasst: So, 18.09.2011 17:18
von komma4
Im BEARBEITEN-Modus eines TableGrids sehe ich kein Ereignis Selection Changed.
Kann das sein, dass Du den Listener zwar registrieren kannst, das Ereignis aber nicht ausgewählt wird?
Re: Listener für ein Tabellen Kontrollfeld (GridControl)
Verfasst: So, 18.09.2011 19:57
von F3K Total
Hallo,
ich weiß zwar nicht genau was du vorhast, trotzdem folgender Hinweis:
Wenn Du einer
Spalte des Grids dem Ereignis "Maustaste losgelassen" den Code
Code: Alles auswählen
Sub find_selection (event)
oselection=event.source.selection
xray oselection
end sub
siehst du die Selection.
HTH
Gruß R
Re: Listener für ein Tabellen Kontrollfeld (GridControl)
Verfasst: Mo, 19.09.2011 08:17
von slotty
Hallo komma4,
da ich bei den Ereignissen für das Objekt nicht "Aktion bestätigen" zur Verfügung hatte, habe ich mich nach dieser Vorgehensweise umgeschaut. Das Objekt besitzt ja auch die Methode "addSelectionChangeListener" dem das Interface "XSelectionChangeListener" übergeben wird. Dieses wiederum unterstützt die von mir definierte Sub "selectionChanged".
Von daher sehe ich meinen Fehler bislang noch nicht.
Aber du hast recht das Event wird nicht gemeldet.
@F3K Total
Danke für den Hinweis. Ich werde mal schauen ob es das leistet was ich benötige.
Werde dann Bericht erstatten.
Gruß
Slotty
Re: Listener für ein Tabellen Kontrollfeld (GridControl)
Verfasst: Mo, 19.09.2011 09:14
von slotty
Hallo liebe Unterstützer,
es hat mir natürlich keine Ruhe gelassen.
@F3K Total
Das von dir genannte Ereignis liefert vom Prinzip das was ich suchte. Unschön ist nur, und das war es was ich nicht wollte, dass auch ein Event erzeugt wird wenn du in den Rand des Objektes klickst. Eine weitere Unschönheit ist, dass du bei jedem Klick ein Event erhälst und nicht nur wenn die Auswahl geändert wurde. Daher mein Versuch mit dem Listener. Aber alles Gute ist nie beisammen und daher werde ich mit deinem Vorschlag leben müssen.
Übrigens, das
oselection=event.source.selection
hat bei mir zu einem Fehler geführt
Mit
oselection=event.source.model.RowSet
erhalte ich aber Zugriff auf die Daten der gewählte Zeile.
Zudem hat Gevater Zufall wieder mitgespielt. Beim Ausprobieren habe ich neue Erkenntnisse zum Listener gewonnen.
1. Er funktioniert so wie ich ihn angemeldet habe.
2. Leider nicht so wie ich es erwartet hätte. Er reagiert nämlich auf die Selektion von Spalten und auch nur wenn man in die Spaltenköpfe klickt. Ob das ein Bug oder ein Feature ist vermag ich nicht zu sagen. Da man aber im Allgemeinen in einer Tabelle Zeilen selektiert hat es mich schon verwundert. Schade, so kann ich ihn nicht gebrauchen.
Gruß
Slotty
Re: Listener für ein Tabellen Kontrollfeld (GridControl)
Verfasst: Mo, 19.09.2011 13:33
von DPunch
Aloha
Was ist denn Dein Ziel?
Soll nur darauf reagiert werden, wenn Du die Zeile wechselst? Wenn ja, dann nimm doch einfach eins der Formular-Events (z.B. "Nach dem Datensatzwechsel").
slotty hat geschrieben:Leider nicht so wie ich es erwartet hätte. Er reagiert nämlich auf die Selektion von Spalten und auch nur wenn man in die Spaltenköpfe klickt. Ob das ein Bug oder ein Feature ist vermag ich nicht zu sagen. Da man aber im Allgemeinen in einer Tabelle Zeilen selektiert hat es mich schon verwundert. Schade, so kann ich ihn nicht gebrauchen.
Kann ich so nicht bestätigen, der SelectionChangeListener feuert bei mir (OOo 3.2.1, Win XP) bei jedweder Änderung der Selektion - ob nun ein Spaltenkopf angeklickt wurde, ein Zeilenkopf oder eine Zelle.
Re: Listener für ein Tabellen Kontrollfeld (GridControl)
Verfasst: Mo, 19.09.2011 14:06
von slotty
Hallo DPunch,
sehr schön, dieses Event scheint mir besser geeignet. Vielen Dank.
Der Listener bleibt aber bei dem von mir beschriebenen Verhalten.
Sollte es da Unterschiede zwischen 3.2 und 3.3 geben ?
Gruß
Slotty