[gelöst] Base: Fokus im GridControl in eine Spalte setzen

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

Moderator: Moderatoren

juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

[gelöst] Base: Fokus im GridControl in eine Spalte setzen

Beitrag von juetho »

Hallo, ich möchte in einem GridControl den Fokus in eine bestimmte Zelle setzen, finde aber keinen Zugriff auf eine einzelne Zelle, auf die ich setFocus anwenden könnte. Die Zeile kann ich über das Formular festlegen, die Spalte über getByIndex, aber beides zusammen? Auch bei xray kann ich nichts Passendes erkennen.

Code: Alles auswählen

Sub column_leaved(oEvent as Object)   ' verlasse die vorherige Spalte
  oColumn = oEvent.Source.Model       ' das ist die vorherige Spalte
  oGrid = oColumn.Parent              ' das ist das Grid
  oForm = oGrid.Parent                ' und das Formular

  oForm.next                          ' gehe in die nächste Zeile
  oNextCol = oGrid.getByIndex(1)      ' das soll die aktive Spalte werden
  xray oNextCol                       ' keine Eigenschaft oder Methode scheint auf eine Zelle zu verweisen
  rem der übliche Weg über setFocus klappt nicht:
  oDocView = thisComponent.getCurrentController
  oDocView.getControl(oNextCol).setFocus
End Sub
Fehlermeldung "Objektvariable nicht belegt". Offensichtlich kann oNextCol nicht als Parameter für getControl verwendet werden, sodass setFocus nicht möglich ist. Gibt es einen besseren Weg? Jürgen
Zuletzt geändert von juetho am Di, 06.11.2012 10:36, insgesamt 1-mal geändert.
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Base: Fokus im GridControl in eine Spalte setzen

Beitrag von F3K Total »

Hallo Jürgen,
ich denke dies funktioniert:

Code: Alles auswählen

Sub Main
    ocontroller = thiscomponent.currentcontroller
    oform = thiscomponent.drawpage.forms.MainForm
    oform.absolute(2)'Zeile
    ogrid = oform.MainForm_Grid
    ocontrol = ocontroller.getcontrol(ogrid)
    ocontrol.CurrentColumnPosition = 1 'Spaltenindex
    ocontrol.setFocus
End Sub
Als ich es mal brauchte, habe ich's nicht gefunden.

Gruß R
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Base: Fokus im GridControl in eine Spalte setzen

Beitrag von juetho »

Danke R
F3K Total hat geschrieben:ich denke dies funktioniert:
In der Tat, das klappt wunschgemäß. Es sieht zwar etwas seltsam aus, wenn ganz eindeutig zuerst das nächste Feld der aktuellen Zeile angesprungen wird und der Fokus dann neu gesetzt wird. Aber nun ja, solche optischen Probleme hat man bei OO häufiger.

Das ist ein Anlass für erneute Klagen: unvollständige Dokumentation von Eigenschaften und Methoden, unübersichtliche Programmierung (wie hängen die Elemente [Grid, Spalten, Zeilen, Zellen] und ihre Darstellung zusammen), wo findet man Antworten auf solche Fragen. Beispielsweise bin ich in der API-Referenz vom GridControl aus wiederholt bei Schnittstellen gelandet, die als "deprecated" bezeichnet wurden, habe also sowieso in einer falschen Richtung gesucht. :shock:

Ich weiß, dass das hier die falsche Stelle für solches Jammern ist; aber ich musste es loswerden. Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Antworten