Seite 1 von 1
listbox mehrfachselektion beschränken
Verfasst: Sa, 29.12.2012 12:58
von kannenklaus
hallo zusammen,
eine listbox als bestandteil eines dialogs soll alle tabellenblätter einlesen und eine mehrfachselektion ermöglichen. der code hierzu steht schon:
Code: Alles auswählen
Sub TabNamenListBoxFuellen
Dim Tab as Object, oListBoxQuelle as Object
Dim strTabName as String
Dim AlleTabNamen 'as String
Dim i as Integer
'--Listboxen referenzieren und leeren
oListBoxQuelle = oDlg.getControl("lbxTabName")
oListBoxQuelle.removeItems(0, oListBoxQuelle.getItemCount())
'--TabNamen ermitteln und in die Listbox schreiben
'xray thisComponent.sheets
AlleTabNamen=thisComponent.sheets.ElementNames
for i=0 to Ubound(AlleTabNamen)
strTabName=AlleTabNamen(i)'jeweiligen Namen auslesen
oListBoxQuelle.addItem(strTabName,i)'füllen
next
oListBoxQuelle.selectItemPos(0,true)
End Sub
nun soll die mehrfachselektion aber auf 2 items beschränkt sein. der code
wählt den ersten eintrag aus. wie kann ich die auswahl auf 2 items beschränken.
freue mich auf "sachdienliche" hinweise.
viele grüße klaus
Re: listbox mehrfachselektion beschränken
Verfasst: Sa, 29.12.2012 13:59
von balu
Hallo Klaus,
wie kann ich die auswahl auf 2 items beschränken.
Mit Mehrfachselektion bei einer Listbox habe ich noch nicht die Erfahrung. Und
Dannenhöfer sagt auch nicht viel zu deinem speziellen Fall. Aber ich würde mir das theoretisch wie folgt vorstellen.
Erstelle dir eine sperate Sub in der die ausgewählten Einträge in einer Schleife, oder ähnliches, gezählt werden. Und in dieser Schleife überprüfst dann auf den Zähler 2. Wenn der Wert erreicht ist, dann mach irgendwas.
Das hört sich nicht besonsders dolle an, aber das ist ja auch noch nicht alles. Denn nun musst Du ja diese Sub noch zuordnen, was Du wohl in dem Dialog-Editor machst. Also ordne diese Sub der Listbox in den Ereignissen bei: Maustaste ... zu. Müsstest du selber testen was für dich ehern zutrifft, ob Maustaste gedrückt, oder Maustaste losgelassen.
Hilft dir das als kleiner Denkanstoß? Wenn nicht, sags uns einfach.
Gruß
balu
Re: listbox mehrfachselektion beschränken
Verfasst: Sa, 29.12.2012 14:43
von balu
Hallo Klaus,
Nachtrag.
Eine einfache und simple Methode wäre folgende.
Setze VOR deiner
Sub TabNamenListBoxFuellen das hier ein.
Und in der Sub selber kommt noch daas hier rein.
Erstelle eine extra
Sub z.B. mit den Namen
Zaehlen und gib dort folgenden Code ein.
Ordne nun diese Sub bei folgenden Ereignissen zu:
- entweder Status geändert
- oder aber Maustaste gedrückt, oder Maustaste losgelassen
Wie schon gesagt, musst Du selber testen was Du nehmen willst. Ich hatte es eben mit Status geändert erfolgreich getestet, aber auch mit Maus... funktionierte es bei mir.
Vielleicht kannst Du ja jezt was mit meinem Denkanstoß anfangen.
Gruß
balu
Re: listbox mehrfachselektion beschränken
Verfasst: Sa, 29.12.2012 16:48
von kannenklaus
hallo balu,
habe mir auch eine ähnliche lösung ausgedacht:
Code: Alles auswählen
Sub TabZumVergleichAuswaehlen
'xray oDlg.getControl("lbxTabName")'.SelectedItemsPos
Dim oSheet1 as Object, oSheet2 as Object
Dim i as Integer
for i=0 to ubound(oDlg.getControl("lbxTabName").SelectedItems())
i=i+0
next i
if i=1 then
'if oDlg.getControl("lbxTabName").SelectedItemPos=0 then
msgbox "Nur eine Tabelle ist gewählt!"
exit sub
elseif i > 2 then
msgbox "Zuviele Tabellen sind gewählt!"
exit sub
end if
'Das zuerst in der Listbox selektierte Sheet wird an die Variable oSheet1 übergeben
oSheet1=thisComponent.sheets(oDlg.getControl("lbxTabName").SelectedItemsPos(0))
'Das zuerst in der Listbox selektierte Sheet wird an die Variable oSheet1 übergeben
oSheet2=thisComponent.sheets(oDlg.getControl("lbxTabName").SelectedItemsPos(1))
msgbox oSheet1.name+"/"+oSheet2.name
end sub
nochmals danke für deine unterstützung.
viele grüße
klaus
Re: listbox mehrfachselektion beschränken
Verfasst: So, 30.12.2012 18:41
von DPunch
Servus
Um die Selekton von mehr als 2 Einträgen von vornherein zu unterbinden, kannst Du Dir auch die aktuelle Selektion immer merken und auf diese Selektion zurücksetzen, sobald mehr als 2 Einträge selektiert werden (die Prozedur z.B. an Status geändert hängen).
Code: Alles auswählen
Private aPreviousSelection()
Sub lboOnChange(oEvt)
oLbo = oEvt.Source
aCurrentSelection = oLbo.SelectedItemsPos
If UBound(aCurrentSelection) > 1 Then
oLbo.Model.SelectedItems = aPreviousSelection
Else
aPreviousSelection = aCurrentSelection
End If
End Sub