listbox mehrfachselektion beschränken

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

Moderator: Moderatoren

kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

listbox mehrfachselektion beschränken

Beitrag 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

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
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: listbox mehrfachselektion beschränken

Beitrag 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
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: listbox mehrfachselektion beschränken

Beitrag von balu »

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
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Re: listbox mehrfachselektion beschränken

Beitrag 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
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: listbox mehrfachselektion beschränken

Beitrag 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
Antworten