listbox mehrfachselektion beschränken

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: listbox mehrfachselektion beschränken

Re: listbox mehrfachselektion beschränken

von DPunch » So, 30.12.2012 18:41

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

Re: listbox mehrfachselektion beschränken

von kannenklaus » Sa, 29.12.2012 16:48

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

von balu » Sa, 29.12.2012 14:43

Hallo Klaus,

Nachtrag.

Eine einfache und simple Methode wäre folgende.

Setze VOR deiner Sub TabNamenListBoxFuellen das hier ein.

Code: Alles auswählen

Dim ixi as Integer
Und in der Sub selber kommt noch daas hier rein.

Code: Alles auswählen

ixi = 0

Erstelle eine extra Sub z.B. mit den Namen Zaehlen und gib dort folgenden Code ein.

Code: Alles auswählen

ixi = ixi +1
	if ixi = 2 then
		print ixi
	end if
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

von balu » Sa, 29.12.2012 13:59

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

listbox mehrfachselektion beschränken

von kannenklaus » Sa, 29.12.2012 12:58

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

Code: Alles auswählen

oListBoxQuelle.selectItemPos(0,true)
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

Nach oben