Hallo Stefan,

ich sehe auch nichts an dem Code, was falsch sein könnte. Ein vager Verdacht, dass es an dem Unterstrich in deinem Prefix liegen könnte, ist ja wohl durch den Test mit einem anderen Prefix - wie von Thomas vorgeschlagen - ausgeräumt. Aber eine eventuelle Alternative habe ich (wohl auch aus Thomas Beispiel): musst du wirklich auf den Wechsel der Auswahl reagieren, oder reicht dir, die Auswahl beim Beenden des Dialogs zu verarbeiten? Im letzteren Fall kannst du Eigenschaften/Methoden des Dialogs verwenden, ohne einen Listener zu benötigen. Hier ein Schnipsel aus meinem Programm, es dürfte ohne Kontext verständlich sein:

   do
        select case DlgProblem.execute()
            case 1
                if oGridControl.hasSelectedRows then
                    exit do
                  else
                    msgbox "Bitte eine Zeile auswählen"
                    goto endcycle
                end if
            case 0
                exit sub
        end select
   endcycle:
   loop
   problemId = oDataModel.getRowHeading(oGridControl.currentRow)

(Die Id wurde in den header der Zeile geschrieben.)

Gruß
Gerhard

Am 08.09.2022 um 21:49 schrieb Stefan Deutsch:
Hi Tomas,

das hab ich gerade mal probiert, aber das Ergebnis bleibt leider das
Gleiche. Ich werde morgen mal den Vorschlag von RObert aus dem Handbuch
probieren.

Schönen Abend noch

Stefan

Am 08.09.2022 um 21:15 schrieb Thomas Krumbein:
Hey Stefan,

jo, sieht gut aus.

Das mit dem Print nach dem Execute() Befehlt ist normal. Das Makro
bleibt bei execute() stehen und läuft erst weiter, wenn der Dialog
wieder geschlossen wird. Das ist also alles korrekt.

Wenn es keine anderen Fehler gibt oder ich die nicht sehe, versuche
mal folgendes: Benenne den Listener anders, also, gib ihm eine andere
Prefix - so etwas wie "Test123_". Vielleicht wird der Name
"sel_change" bereits intern irgendwie genutzt - das könnte dann zu
Konflikten führen.

Einen Versuch wäre es wert....

Viele Grüße

Thomas


Am 08.09.2022 um 20:50 schrieb Stefan Deutsch:
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





--
Diese E-Mail wurde von Avast-Antivirussoftware auf Viren geprüft.
www.avast.com


--
Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org
Probleme? 
https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy

Antwort per Email an