Auslesen von Auswahl (Listbox und Combobox) in Variablen

Das Textverarbeitungsprogramm

Moderator: Moderatoren

Tigerlillie
**
Beiträge: 25
Registriert: Di, 15.07.2003 14:31
Wohnort: Einbeck & Frankfurt (Main)
Kontaktdaten:

Auslesen von Auswahl (Listbox und Combobox) in Variablen

Beitrag von Tigerlillie »

Hallo,

im Writer habe ich ein schönes Makro erstellt, leider funktionieren 6 Sachen noch nicht, aber damit ich nicht ins Schleudern gerate, schön langsam eins nach dem anderen. ;)

Mein erstes und bislang wichtigstes Problem hängt mit der Listbox und der Combobox zusammen.
Ich habe beides untereinander in einem Dialog, um bestimmte Mitarbeiter auszuwählen (immer nur einen) und der ausgewählte Eintrag soll in einer Variablen gespeichert werden.
Leider weiß ich nicht, wie man die Auswahl auslesen kann.

Beispiele habe ich schon gehabt, die mir aber nicht geholfen haben, da sie nicht bei mir funktioniert haben (hab OpenOffice 1.0.3 und das war wohl für was superaltes).

Ich freue mich schon auf Vorschläge, Ideen, Tricks und Tipps.

Danke,
Lillie :D
openmind
****
Beiträge: 184
Registriert: So, 29.06.2003 15:00
Wohnort: Schweiz

Beitrag von openmind »

Für den Fall einer Listbox sollte das ungefähr so gehen:

Code: Alles auswählen

	oDoc = ThisComponent
	oDrawPage = oDoc.DrawPage
	oForm = oDrawPage.Forms.GetByName( "formularName" )

	Dim sAusgewaehlterEintrag as String
	Dim oListBox as Object
	sAusgewaehlterEintrag = oListBox.getSelectedItem()

	MsgBox sAusgewählterEintrag
Die Listbox bietet folgende Methoden:
http://api.openoffice.org/common/ref/co ... stBox.html

Die anderen Controls können im Packet com.sun.awt eingesehen werden.
Meine Installation: AMD Athlon XP 1600+, 512 MB RAM, SuSE Linux 8.2, OpenOffice 1.1
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/
Tigerlillie
**
Beiträge: 25
Registriert: Di, 15.07.2003 14:31
Wohnort: Einbeck & Frankfurt (Main)
Kontaktdaten:

Danke :)

Beitrag von Tigerlillie »

Guten Morgen,

danke für die Antwort, werde ich kommende Woche sofort ausprobieren. :)

Ein schönes Wochenende
Lillie
Tigerlillie
**
Beiträge: 25
Registriert: Di, 15.07.2003 14:31
Wohnort: Einbeck & Frankfurt (Main)
Kontaktdaten:

Geht nicht :(

Beitrag von Tigerlillie »

Hallo,

folgendes habe ich eingegeben:

DialogLibraries.LoadLibrary("Standard")
oAuswahl = CreateUnoDialog(DialogLibraries.Standard.dlgAuswahl)
oListBox = oAuswahl.GetControl ("lbl_Sachb")
sZusatz = oListBox.getSelectedItem()


Der erste Teil ist soweit okay bis zu dem sZusatz, weil damit habe ich die Einträge schon in die Listbox reinschreiben lassen.
Allerdings geht das Makro einfach weiter und gibt keinen Wert in die Variable sZusatz ein.
Woran kann das liegen?

Viele Grüße :(
Lillie
Tigerlillie
**
Beiträge: 25
Registriert: Di, 15.07.2003 14:31
Wohnort: Einbeck & Frankfurt (Main)
Kontaktdaten:

Könnte das der Fehler sein?

Beitrag von Tigerlillie »

Hallo,

seit Montag teste ich immer wieder die Tipps vom openmind, aber ohne Ergebnis.
Kann es sein, dass es nicht geht, weil ich vorher die Daten aus einer Textdatei in die Listbox einlese? Es könnte doch dann sein, dass deswegen nichts gefunden wird (als Wert wird 0 angezeigt).

Danke für Ideen,
viele Grüße
Lillie :)
openmind
****
Beiträge: 184
Registriert: So, 29.06.2003 15:00
Wohnort: Schweiz

Beitrag von openmind »

hi,

scheint als ob ich da was missverstanden habe. Mein Code zeigt wie man ein Formular verwendet. Dein Code zeigt, dass Du ein Dialog meinst, wie Du das auch im ersten Post geschrieben hast. Sorry...

Ich versuch die Scharte auszuwetzen. Es folgt ein Beispiel, welches einen Dialog erzeugt, Einträge in einer vorerst leeren Listbox des Dialoges hinzufügt und schliesslich anzeigt.

Eine zweite Subprozedur liest dan den selektierten Eintrag der Listbox aus und zeigt ihn mit einer MessageBox an.

Insgesamt kommt es aber auf dasselbe hinaus, wie das was Du scheinbar schon ausbrobiert hast, nur dass ich nicht 0, sondern den Text des Eintrages als Rückgabewert von getSelectedItem() bekomme. :-( Dennoch:

Code: Alles auswählen

Sub openCustomerDialog

	' init brauchts um die DB-connection zu holen etc.
	' out-of-scope hier
	init()
		
	' erzeuge den Dialog
	DialogLibraries.LoadLibrary( "Standard" )
	oCustomerDialog = CreateUnoDialog( DialogLibraries.Standard.CustomerDialog )
	
	' listbox-control des Dialogs deklarieren
	' istbox hat den Namen 'customerList'
	Dim oList as Object	
	oList = oCustomerDialog.getControl( "customerList" )

	' datenbank connection öffnen
	oDBStatement = oDBConnection.createStatement()
	' SELECT statement absetzten
	oDBResult = oDBStatement.executeQuery( "SELECT [...] FROM [...] WHERE [...]" )
	
	' für jeden Kunden-Eintrag in der DB gibts einen Eintrag 
	' in der Listbox
	While oDBResult.next() 

		oList.addItem( oDBResult.getString(2) & " - " & oDBResult.getString(3) ) 

	Wend

	' schliess das resultset und das statement	
	oDBResult.close()
	oDBStatement.close()
	
	' zeige initialisierten Dialog an
	oCustomerDialog.Execute()
End Sub
Der Dialog ist jetzt erschienen. Neben der Listbox gibt es einen Button, der durch drücken folgende Subprozedur aufruft:

Code: Alles auswählen

Sub showSelectedCustomer
	
	' hole die List aus dem Dialog, der als globale
	' variable deklariert ist
	Dim oList as Object	
	oList = oCustomerDialog.getControl( "Kunden" )
	
	' zeige den Wert des selektierten Eintrags an
	MsgBox oList.getSelectedItem()
End Sub
Wie erwähnt verwendet die zweite Prozedur eine globale Variable oCustomerDialog. Ganz einfach am Anfang die VAriable ausserhalb jeglicher Subprozedur gloabl deklarieren:

Code: Alles auswählen

Gobal oCustomerDialog as Object
Das ganze hab ich mit Linux unter 1.1rc nochmals getestet und lief auch auf 1.0.3
Meine Installation: AMD Athlon XP 1600+, 512 MB RAM, SuSE Linux 8.2, OpenOffice 1.1
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/
Tigerlillie
**
Beiträge: 25
Registriert: Di, 15.07.2003 14:31
Wohnort: Einbeck & Frankfurt (Main)
Kontaktdaten:

Woran könnte es noch liegen, dass es bei mir nicht geht?

Beitrag von Tigerlillie »

Guten Morgen,

meine Objekte für die Dialoge habe ich nicht als globale Variablen deklariert. Aber ich denke, daran kann es nicht liegen...
Das Einlesen geht ja, aber das Auslesen.
Inzwischen habe ich versucht die Position in eine Integer-Variable einzulesen und damit einem Array zu sagen, dass er sich mit dem anderen vergleichen kann (was sonst mit normaler String-Variablen und dem Array wäre).

Ob es hilft, weiß ich nicht, aber das hier ist der erste Teil mit dem Einlesen in die Listbox:

Sub Main

Open sOrgZif For Input As 1
x = 0
While Not eof(1)
Input #1, Zus_Array(x), An_Array(x), Vn_Array(x), SB_Array(x), Zi_Array(x), Tel_Array(x), Fx_Array(x), Em_Array(x), Ba_Array(x), Abk_Array(x), FB_Array(x), A1_Array(x), A2_Array(x), Hs_Array(x), SpZ_Array(x)
x = x+1
Wend
Close #1

iZahl = x

DialogLibraries.LoadLibrary("Standard")
oAuswahl = CreateUnoDialog(DialogLibraries.Standard.dlgAuswahl)
oAuswahlModel = oAuswahl.Model
oSachb = oAuswahl.GetControl ("lbl_Sachb")

Dim sCount as String
While x <> 0
sCount = " "
oSachb.AddItem (Zus_Array(x) & " " & sCount,1)
x = x - 1
Wend

oAuswahl.Execute()
End Sub


In dem nächsten Sub ist die Stelle, an der es nicht weitergeht:

Sub Aendern
DialogLibraries.LoadLibrary("Standard")
oAuswahl = CreateUnoDialog(DialogLibraries.Standard.dlgAuswahl)
oListBox = oAuswahl.GetControl ("lbl_Sachb")

sZusatz = oListBox.getSelectedItem()
MsgBox sZusatz
z = 0
oAuswahl.Endexecute()
x = iZahl
While sZusatz<> Zus_Array(z) and z < 200
z = z + 1
Wend
iZahl1 = z
.
.
.


Vielleicht siehst du ja einen Fehler...

Vielen Dank :D
und viele Grüße
Lillie
openmind
****
Beiträge: 184
Registriert: So, 29.06.2003 15:00
Wohnort: Schweiz

Beitrag von openmind »

Ich würde mal schätzen, dass es daran liegt, dass Du in der zweiten SubProcedur einen neuen Dialog erzeugst und nicht den schon erzeugten abfragts, welcher Einträge enthält.

Code: Alles auswählen

Sub Aendern 

' hier wird ein NEUER Dialog erzeugt und der 
' Variable oAuswahl zugewiesen. 
DialogLibraries.LoadLibrary("Standard") 
oAuswahl = CreateUnoDialog(DialogLibraries.Standard.dlgAuswahl) 

' muss leer sein wenn Du nicht schon Einträge in DialogDesigner gemacht hast.
oListBox = oAuswahl.GetControl ("lbl_Sachb") 
 
sZusatz = oListBox.getSelectedItem() 
MsgBox sZusatz 

' tausche da mit oAuswahl.Execute()
' hats jetzt zwei Dialoge ??
oAuswahl.Endexecute() 


End Sub
Versuch doch mal einfach

Code: Alles auswählen

Global oAuswahl as Object


ausserhalb der Prozeduren und lass in der zweiten Subprozedur das CreateUnoDialog, weil das, wie der Name sagt, einen neuen Dialog kreiert. (doofes deutsches Wort 'kreiert', was?)
Meine Installation: AMD Athlon XP 1600+, 512 MB RAM, SuSE Linux 8.2, OpenOffice 1.1
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/
Tigerlillie
**
Beiträge: 25
Registriert: Di, 15.07.2003 14:31
Wohnort: Einbeck & Frankfurt (Main)
Kontaktdaten:

ES GEHT!!!! *freu*

Beitrag von Tigerlillie »

Herzlichen Dank,
er hat jetzt einen Wert und sogar den richtigen. :idea:
Zwar geht das noch nicht, das er den Datensatz rauspickt, aber das mache ich dann später. Aber das geht und das war das derzeit Wichtigste.
Ich habe jetzt oAuswahl global gemacht und den zweiten Aufruf des Dialogs geremt und zack es geht.

Viele Grüße von einer erleichtert in die Mittagspause gehende
Lillie :D
Tigerlillie
**
Beiträge: 25
Registriert: Di, 15.07.2003 14:31
Wohnort: Einbeck & Frankfurt (Main)
Kontaktdaten:

Noch schnell was ausprobiert

Beitrag von Tigerlillie »

Die Datensätze werden ausgelesen, anstatt der String-Variablen nehme ich jetzt eine Integer und lasse die Position des ausgewählten Items einlesen. Dadurch kann ich das Array mit dem anderem Array aus der Datenbank vergleichen und das ganz fungiert. *jubel* Ist das ein Tag. :wink:
Antworten