Hi Thomas,
Hier mal die letzten Zeilen des Makros, in dem das GridControl mit
Inhalt gefüllt wird. Soweit ich das sehe, hab ich das vom Ablauf gemacht
wie du in deinem Beispiel.
oGridControl =
createUnoService("com.sun.star.awt.grid.UnoControlGrid")
oGridControl.setModel(oGridModel)
oKommDia.addControl("GridAnzeigeKommission", oGridControl)
oGridDataModel =
oKommDia.Model.getByName("GridAnzeigeKommission").GridDataModel
'Run this macro to start event intercepting
sPrefix = "sel_change_"
sService = "com.sun.star.awt.grid.XGridSelectionListener"
'Create a listener to intercept the selection change events
vSelChangeListener = CreateUnoListener(sPrefix, sService)
'Register the listener to the document controller
oGridControl.addSelectionListener(vSelChangeListener)
iData = oGridDataModel.getCellData(3, iRowAktuell)
oKommDia.getControl("nf_ausgefasst").Value = iData
oKommDia.Controls(7).deselectAllRows
oKommDia.Controls(7).selectRow(iRowAktuell)
oKommDia.execute()
End Sub
Und hier die beiden Subs. disposing wird auch ausgeführt, wenn ich den
Dialog über das X beende.
Sub sel_change_disposing(vEvent)
print 21
End Sub
Sub sel_change_selectionChanged(vEvent)
Dim vCurrentSelection As Object
vCurrentSelection = vEvent.source.CurrentRow
MsgBox "Selected Row = " & vEvent.source.CurrentRow
print 27
End Sub
Allerdings ist mir auch aufgefallen, dass ein Print, dass ich hinter die
Zeile oKommDia.execute() setze, erst ausgeführt wird, wenn ich den
Dialog beende. Könnte es damit zusammenhängen, dass der Dialog die
anderen im aufrufenden Formular blockiert?
Schönen Abend noch!
Stefan
Am 08.09.2022 um 20:07 schrieb Thomas Krumbein:
Hey Stefan,
tia, wie meldest Du den Listner denn an? Codeschnipsel?
Er muss am Gridelement angemeldet werden, nachdem das Model zugewiesen
wurde:
oGridControl =
createUnoService("com.sun.star.awt.grid.UnoControlGrid")
oGridControl.setModel(oGridModel)
oRaDlg.addControl("tab_g1", oGridControl)
REM Selection Listener erzeugen
oReAbgLis = CreateUnoListener("ReAblSelection_",
"com.sun.star.awt.grid.XGridSelectionListener")
oGridControl.addSelectionListener(oReAbgLis)
Dies als Beispiel. Du brauchst dann mindestens noch die zwei Funktionen
'********************
' REM Listener Funktionen
Sub ReAblSelection_selectionChanged(oEvt)
dim aDSatz()
If bAblFlag Then
bAblFlag = false
Exit sub
End if
'MsgBox "Markierte Zeile: " & oEvt.source.CurrentRow
aDSatz =
oRaDlg.getControl("tab_g1").model.GridDataModel.getRowData(oRaDlg.getControl("tab_g1").getCurrentRow)
REM Rechnungsdatendetails lesen und Eintragen
AbgleichEinzelRechnung(aDSatz())
End Sub
Sub ReAblSelection_disposing(oEvt)
End Sub
Es wird immer die komplette Zeile zurückgeliefert - die weitere
Auswahl liegt dann an Dir bzw. dem Code
Vielleicht hilft es :)
Viele Grüße
Thomas
Am 08.09.2022 um 19:49 schrieb Stefan Deutsch:
Guten Abend,
Ich verwende gerade das erste Mal einen Listener in einem Makro. Und
zwar hab ich einen Dialog, das ein GridControl enthält. Dies kann man
zwar einzeichnen, aber muss es ja im Makro zum Leben erwecken. Das
klappt auch soweit. Jetzt wollte ich einen Listener hinzufügen, der
auf
SelectionChange anschlägt. Diesen hab ich in dem Objekt angemeldet,
das
das UnoControlGrid enthält. Das hat auch geklappt (bzw. es kommt keine
Fehlermeldung). Allerdings wird mein Sub
sel_change_selectionChanged(vEvent) nie ausgelöst, egal, wie viel
ich in
der Tabelle rumklicke.
Hat jemand einen HInweis für mich?
Viele Grüße
Stefan