Listener für ein Tabellen Kontrollfeld (GridControl)

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

slotty
Beiträge: 7
Registriert: Mi, 14.09.2011 11:33

Listener für ein Tabellen Kontrollfeld (GridControl)

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Listener für ein Tabellen Kontrollfeld (GridControl)

Beitrag 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?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Listener für ein Tabellen Kontrollfeld (GridControl)

Beitrag 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
slotty
Beiträge: 7
Registriert: Mi, 14.09.2011 11:33

Re: Listener für ein Tabellen Kontrollfeld (GridControl)

Beitrag 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
slotty
Beiträge: 7
Registriert: Mi, 14.09.2011 11:33

Re: Listener für ein Tabellen Kontrollfeld (GridControl)

Beitrag 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
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Listener für ein Tabellen Kontrollfeld (GridControl)

Beitrag 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.
slotty
Beiträge: 7
Registriert: Mi, 14.09.2011 11:33

Re: Listener für ein Tabellen Kontrollfeld (GridControl)

Beitrag 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
Antworten