
Gruß,
Moderator: Moderatoren
Vermutlich, weil eine Combobox auch neue Eingaben erlaubt, und diese selbstverständlich keine Position haben.Maggus hat geschrieben:Kann mir mal bitte jemand erklären, warum man bei Comboboxen nicht die Position des selektierten Items bestimmen kann?
Ja, aber dafür müsste ich ja eine Schleife machen. Meine Comboboxen sind aber gut gefüllt, was wahrscheinlich zu lange dauern dürfte.DPunch hat geschrieben: Als Workaround kannst Du den selektierten Text / Wert im Array aller Items suchen und, wenn vorhanden, die Position dort nehmen - ergibt das gleiche wie die SelectedItemPos in einem Listenfeld.
Das geht so schnell, dass Du davon nichts mitkriegen dürftest.Maggus hat geschrieben:Ja, aber dafür müsste ich ja eine Schleife machen. Meine Comboboxen sind aber gut gefüllt, was wahrscheinlich zu lange dauern dürfte.
Code: Alles auswählen
Sub getSelectedItemPos_combobox
t1 = getsystemticks() ' um Ausfuehrungsdauer zu messen
oComSet = oDialDokErst.getControl("ComboSetting") 'die Combobox um die es geht
iItemNumber = -1 ' iItemNumber wird mit -1 initialisiert
iListCount = ubound(oComSet.Model.StringItemList) 'Anzahl der Elemente der Combobox
for i=0 to iListCount 'Schleife ueber die Elemente der Combobox
if oComSet.text = oComSet.Model.StringItemList(i) then
iItemNumber = i 'Falls der Text in der Combobox dem i-ten Element entspricht ist i die die Position des Elements
exit for
end if
next
t2 = getsystemticks()
if iItemNumber = -1 Then 'Falls iItemNumber noch -1 ist, also kein uebereinstimmendes Element in der Schleife gefunden wurde
msgbox("Item """ + oComSet.text + """ nicht in Liste")
Else
msgbox("Item """ + oComSet.text + """ hat Nr. " + iItemNumber)
End If
msgbox("Dauer: " & t2-t1 & " ms und Ende")
REM Was ist ein Tick?
t1 = getsystemticks()
wait(1000)
t2 = getsystemticks()
msgbox("1 Tick ist ungefaehr " & (t2-t1)/1000 & " ms")
REM 1 Tick ist ca. 1 ms
End Sub
Code: Alles auswählen
Globalscope.BasicLibraries.loadLibrary("Tools")
nSelectedItemPos = IndexInArray(meineCombobox.Text,meineCombobox.Model.StringItemList)
Code: Alles auswählen
iListCount = ubound(oComSet.Model.StringItemList) 'Anzahl der Elemente der Combobox
for i=0 to iListCount 'Schleife ueber die Elemente der Combobox
'#####
if oComSet.text = oComSet.Model.StringItemList(i) then '##### no-go #####
'#####
iItemNumber = i 'Falls der Text in der Combobox dem i-ten Element entspricht ist i die die Position des Elements
exit for
end if
next
Stimmt. Ohne das ist das Script um den Faktor 10 schneller. Danke für den HinweisAusserdem kann ich nur dringend davon abraten, allgemein bei mehrmaliger Verwendung, aber vor allem in Schleifen (!), Obekt- und Arrayattribute jedes Mal wieder neu über das "Mutter"-Objekt zu referenzieren
Ist auch sehr praktisch. Nochmals danke für den HinweisGlobalscope.BasicLibraries.loadLibrary("Tools")
So gut hätte ich das nicht ausdrücken können, aber genau da lagen meine Bedenken, mit der Dauer der Schleife.DPunch hat geschrieben:Ausserdem kann ich nur dringend davon abraten, allgemein bei mehrmaliger Verwendung, aber vor allem in Schleifen (!), Obekt- und Arrayattribute jedes Mal wieder neu über das "Mutter"-Objekt zu referenzieren