Probleme mit Combobox

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

Moderator: Moderatoren

Benutzeravatar
rblock
Beiträge: 5
Registriert: Mi, 01.06.2005 22:15
Wohnort: Limburg

Probleme mit Combobox

Beitrag von rblock »

Hi,

ich suche nun schon wer weiß wie lange in den verschiedensten Internetseiten und Dokumenten nach einer Lösung für mein Problem.

Ich lese die Namen der vorhandenen Sheets und möchte diese als Liste einer Combobox in einem Dialog übergeben. Die Namen werden zwar gelesen, aber die Combobox erhält nichts. Nur "ctl.setText("XX") funktioniert. Hier der Code:

Code: Alles auswählen

Sub Main
	Dim oDocument As Object, oSheet As Object, oCell As Object, dlg As Object, ctl As Object
	Dim iStartdatum As Date, iEndedatum As Date, iStartzeit As Date, iEndezeit As Date, iSumme As Currency
	Dim sSelektion As String
	Dim iSheets As Integer, i As Integer, oTmpObject As Object
	Dim sTmp As String
	
	oDocument=ThisComponent
	iSheets=oDocument.Sheets.count
	DialogLibraries.LoadLibrary("Standard")
	dlg = CreateUnoDialog(DialogLibraries.Standard.Auswahldialog)
	ctl = dlg.getControl("cbSheets")
	ctl.removeItems(0, iSheets)
	For i = 0 to iSheets-1
		oTmpObject=oDocument.Sheets(i)
		ctl.addItem(oTmpObject.Name, i)
	Next i
	Select Case dlg.Execute()
	Case 0
		'abbruch
	Case 1
		'ok
	End Select
	
End Sub
Weiß jemand, was ich Schussel falsch mache? :(

EDIT: Jetzt bin ich schon weiter. Ich hatte im Dialogeditor die Eigenschaft "Nur lesen" auf "ja" gesetzt. Ich habe das auf "nein" geändert und nun wird die Liste auch gefüllt. Nun muss ich noch herausfinden, wie ich die Kombobox nach dem Befüllen auf Readonly setzen muss und wie ich vorher oder nachher das erste Element selektiere. :)

Seufzende Grüße
Reiner
--
"Wer fragt, ist ein Narr für fünf Minuten. Wer nicht fragt, bleibt ein Narr für immer." Chinesische Weisheit
"Erfolg hat, wer ihm entgegengeht, statt ihm nachzulaufen." Onassis, Aristoteles

Reiner Block
http://www.eRBe-Software.de
Benutzeravatar
rblock
Beiträge: 5
Registriert: Mi, 01.06.2005 22:15
Wohnort: Limburg

Beitrag von rblock »

Hi,

ich habe jetzt noch folgendes in der For-Next-Schleife eingefügt:

Code: Alles auswählen

If i = 0 Then
   sStart=oTmpObject.Name
End If
und folgendes nach der For-Next-Schleife eingefügt:

Code: Alles auswählen

ctl.selectItem(sStart, true)
ctl.Model.ReadOnly(True)
Aber in der ersten Zeile bekomme ich die Meldung, dass die Eigenschaft oer Methode nicht gefunden wird. :(

Hat jemand eine Erklärung dafür?

EDIT: Ich habe es auch schon mit "ctl.selectItemPos(0, true)" bzw. "ctl.selectItemPos(0, 1)" ausprobiert, was beides zum gleichen Ergebnis führte. :(

EDIT 2: Kommentiere ich die erste Zeile aus, so hat die Zweite keine Wirkung. Sprich: Die Kombobox ist trotzdem editierbar. :( Ob sie ohne Auskommentieren eine Wirkung hat ist zu bezweifeln, aber nicht zu überprüfen, da das Script nie an diese Stelle kommt.

Verzweifelte Grüße
Reiner
--
"Wer fragt, ist ein Narr für fünf Minuten. Wer nicht fragt, bleibt ein Narr für immer." Chinesische Weisheit
"Erfolg hat, wer ihm entgegengeht, statt ihm nachzulaufen." Onassis, Aristoteles

Reiner Block
http://www.eRBe-Software.de
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag von ykcim »

Hi,

die ersten Probleme hast Du ja gelöst. Also zu Deinen restlichen:

Bei der ComboBox gibt es kein select. Der Text für das Feld wird mit setText gesetzt und mit getText ausgewertet.

Code: Alles auswählen

   Ctl.setText(sStart)
Später muß die Entscheidung aus dem Dialog auch mit gettext gelesen werden.

Code: Alles auswählen

   Ergebnis=Ctl.getText
Die richtige Syntax für Readonly ist

Code: Alles auswählen

   ctl.model.readonly=true

mfg
Michael


Ich habe vergessen:
Readonly=True und eine Vorgabe im Text beißt sich. Dann gibt es keine Auswahlmöglichkeit.
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Benutzeravatar
rblock
Beiträge: 5
Registriert: Mi, 01.06.2005 22:15
Wohnort: Limburg

Beitrag von rblock »

Hi Michael,

was sagst Du dann dazu: http://www.dannenhoefer.de/faqstarbasic ... oxen..html?

oder dazu:

Code: Alles auswählen

REM  *****  BASIC  *****
REM  *** (c) T. Krumbein, M.I.C. Consulting ***
REM  *** www.mic-consulting.de              ***
REM  *** Für private Nutzung frei, solange  ***
REM  *** der Hinweis hier nicht entfernt    ***
REM  *** wird.                              ***

Dim oD1 as Object  'Dialog 1 (Eingabemaske) definieren
Dim myDoc as Object 'Dokument definieren
Dim oT1 as Object, oT2 as Object  'Tabelle "Liste" und "Daten" definieren
Dim nNeueDatSatz as integer  'Neue DatensatzZeilennummer
Dim nLastKm as integer
Dim dZeitCh as date    'Zeitspanne bei Änderung

'------------------------------

'------------------------------
Sub main
	myDoc=ThisComponent
	oT1=myDoc.sheets(1)
	oT2=myDoc.sheets(2)
'--- Maske initialisieren	
	DialogLibraries.LoadLibrary( "Standard" )
	oD1 = CreateUnoDialog( DialogLibraries.Standard.Maske )
	initMaske
	oD1.Execute()	
end sub
'---------Formular initialisieren und Werte eintragen
Sub initMaske
'--- Neue Zeilennummer erzeugen
	nNeueDatSatz = oT2.getCellRangeByName("b1").value + 11
'--- Zeitspanne eintragen
	dZeitCH = oT2.getCellRangeByName("b3").value
'--- Neue Datensatznummer eintragen	
	oD1.getcontrol("DatSatzNr").text= nNeueDatSatz - 10	
'--- letzten Kilometerstand ermitteln und eintragen
	oD1.getcontrol("kmAbf").value = oT1.getCellRangeByName("H"&nNeueDatSatz-1).value
'---letztes Datum ermitteln, ein Tag addieren und eintragen
	dim dTagAnk as date
	dTagAnk = oT1.getCellRangeByName("i"&nNeueDatSatz-1).value+1
	oD1.getcontrol("databf").text = dTagAnk
'---Auswahllisten mit Daten füllen
	FuellListe("AbfOrt", "d", 2, 10)  'Fuellliste("Liste", Spalte, Zeile, Anzahl Elemente)
	FuellListe("AnkOrt", "d", 2, 10)
	FuellListe("FahrtG", "d", 15, 10)
	FuellListe("Fahrer", "A", 10, 5)
'---Eingabefelder Inhalte löschen
[...]
End Sub

'-----Auswahllisten füllen
sub FuellListe(Liste, spalte, zeile, eNr)
	FFeld=oD1.getcontrol(Liste)
	FFeld.removeitems(0, eNr)
	for i=0 to eNr
		adr="$"+spalte+"$"+(i+zeile)
		inhalt=oT2.getCellRangeByName(adr).string
		FFeld.additem(inhalt,i)
	next
	FFeld.additem("",0)
end sub
[...]
Als das Beispiel funktioniert und die Komboboxen werden gefüllt... :(

Nachdenkliche Grüße
Reiner
--
"Wer fragt, ist ein Narr für fünf Minuten. Wer nicht fragt, bleibt ein Narr für immer." Chinesische Weisheit
"Erfolg hat, wer ihm entgegengeht, statt ihm nachzulaufen." Onassis, Aristoteles

Reiner Block
http://www.eRBe-Software.de
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag von ykcim »

hi,

was soll ich dazu sagen?

http://www.dannenhoefer.de/faqstarbasic ... oxen..html

Den Fehler mit selectitempos und auch gleich den mit der Mehrfachselektion habe ich gerade rausgelöscht.

Bei dem Quellcode, muß ich leider gestehen, weiß ich nicht was Du meinst.

mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Benutzeravatar
rblock
Beiträge: 5
Registriert: Mi, 01.06.2005 22:15
Wohnort: Limburg

Beitrag von rblock »

Hi Michael,

ich habe Dir über Deine E-Mail-Adresse einmal das komplette Beispiel gesendet. Denn wenn Du es ausprobierst, wirst Du feststellen, dass dieses addItems dort funktioniert. Warum, ist mir allerdings schleierhaft. Ich werde es gleich einmal komplett debuggen. :)


Debuggende Grüße
Reiner
--
"Wer fragt, ist ein Narr für fünf Minuten. Wer nicht fragt, bleibt ein Narr für immer." Chinesische Weisheit
"Erfolg hat, wer ihm entgegengeht, statt ihm nachzulaufen." Onassis, Aristoteles

Reiner Block
http://www.eRBe-Software.de
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag von ykcim »

Hi Reiner,

warum soll additem / additems nicht funktionieren?

Du hast oben vo selectitem geschrieben.

mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Antworten