Probleme mit "thisComponent"

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

Moderator: Moderatoren

DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Probleme mit "thisComponent"

Beitrag von DPunch »

Aloha

Verwende nicht mehrmals "thisComponent", schon gar nicht, wenn Du zwischendurch andere Dateien (sichtbar) öffnest.
Hol Dir einmal ganz am Anfang des Codes die Referenz auf das aufrufende Dokument, z.B. so

Code: Alles auswählen

oDoc = thisComponent
und ersetze alle anderen "thisComponent"s im Code durch (in diesem Fall) "oDoc".
Zumindest wenn Du nicht in dem Abschnitt

Code: Alles auswählen

' Daten kopieren...gelöscht wegen Übersichtlichkeit
auch die geöffnete Datei mit thisComponent ansprichst - solltest Du das tun, ersetz in dem Abschnitt die "thisComponent"s durch "oCSV"
OpBasic
Beiträge: 1
Registriert: Do, 11.08.2011 20:08

Re: Probleme mit "thisComponent"

Beitrag von OpBasic »

Geil, jetzt gehts! Vielen, vielen Dank!

Jetzt weiß ich auch, warum in den meisten Beispielen steht:

Code: Alles auswählen

myDoc = ThisComponent
myView = myDoc.CurrentController
mySheet = myDoc.Sheets.getByName(sBlattName)
myView.setActiveSheet(mySheet)  
Ich war nämlich so 'clever', zwei Zeilen sparen zu wollen und habe daraus das gemacht:

Code: Alles auswählen

mySheet = ThisComponent.Sheets.getByName(sBlattName)
ThisComponent.CurrentController.setActiveSheet(mySheet)
Allerdings mit großen Nachteilen...

Nochmals Danke.
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Probleme mit "thisComponent"

Beitrag von DPunch »

Aloha
OpBasic hat geschrieben:Ich war nämlich so 'clever', zwei Zeilen sparen zu wollen und habe daraus das gemacht(...)
Ja, leider recht häufig gemachter Fehler.
Am Besten wie gesagt nur ein einziges Mal am Anfang eine Variable für das aufrufende Dokument setzen und alle Aktionen, die dieses Dokument betreffen, auch nur mit dieser Variablen umsetzen - gleiches gilt für geöffnete Dokumente, immer die durch die öffnende Methode zurückgelieferte Referenz nutzen, um das Dokument anzusprechen (wobei Du letzteres ja anscheinend sowieso machst).
Es gab vor Kurzem hier schonmal eine längere Diskussion um "thisComponent" und ich bleibe dabei: nur ein einziges Mal im Code benutzen, und zwar um das aufrufende Dokument zu referenzieren. Alles weitere ergibt sich über diese Variable oder die Rückgabewerte von öffnenden Methoden.
Antworten