Pagina 1 di 1

[Risolto] Interazione tra ComboBox e ListBox

Inviato: mercoledì 14 ottobre 2015, 18:33
da giuserpe
Per lo sviluppo di LeenO, sto mettendo in ordine delle tabelle dei pesi per il calcolo della quantità relative al ferro di armatura piuttosto che delle carpenterie metalliche o ancora di tubi e così via.
Ho messo ogni tabella in forma di lista di stringhe in una ListBox. Quindi, a seconda della tabella che mi interessa, devo avviare un Dialog piuttosto che un altro.
Il punto è questo: mi piacerebbe tenere in qualche modo tutte le ListBox in un unico Dialog e decidere quale di queste visualizzare a seconda della stringa visualizzata in una ComboBox.
Sarebbe ancora meglio se l'unica ListBox venisse compilata, via macro, a secondo del titolo scelto nella ComboBox. Sono certo che sia fattibile, ma non riesco a trovare documentazione in tal senso.
La questione è proprio questa: come riempio una ListBox via macro? Per il resto dovrei riuscire a cavarmela da solo.

Ciao
Giuseppe

Re: Interazione tra ComboBox e ListBox

Inviato: mercoledì 14 ottobre 2015, 21:04
da patel

Codice: Seleziona tutto

Sub FillListbox
  DialogLibraries.loadLibrary("Standard")
  d = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
  d.getControl("ListBox1").addItems(Array("Voce 1", "Voce 2", "Voce 3", "Altri"), 0)
  d.execute()
  d.dispose()
End Sub

Re: Interazione tra ComboBox e ListBox

Inviato: giovedì 15 ottobre 2015, 10:39
da Gaetanopr
Un'altra possibile soluzione allego esempio con listbox che cambia i dati in funzione della scelta effettuata nella combobox

Re: Interazione tra ComboBox e ListBox

Inviato: giovedì 15 ottobre 2015, 13:39
da giuserpe
Non suo come ringraziarvi...
Giuseppe

Re: [risolto] Interazione tra ComboBox e ListBox

Inviato: giovedì 15 ottobre 2015, 16:44
da giuserpe
Ho risolto in maniera non definitiva con il codice qui di seguito:

Codice: Seleziona tutto

Sub FillListbox
	tabelle() = Array("Tondo per c.a.", "Profilati HEA") ' 
	
	FerroTondo() = Array("ø4 - 0,099", "ø5 - 0,154", "ø6 - 0,222", "ø7 - 0,302", "ø8 - 0,395", "ø9 - 0,499", "ø10 - 0,617", "ø11 - 0,746", "ø12 - 0,888", "ø13 - 1,042", "ø14 - 1,208", "ø15 - 1,387", "ø16 - 1,578", "ø17 - 1,782", "ø18 - 1,998", "ø19 - 2,226", "ø20 - 2,466", "ø21 - 2,719", "ø22 - 2,984", "ø23 - 3,261", "ø24 - 3,551", "ø25 - 3,853", "ø26 - 4,168", "ø27 - 4,495", "ø28 - 4,834", "ø29 - 5,185", "ø30 - 5,549", "ø31 - 5,925", "ø32 - 6,313")
	HEA() = Array ("HEA 100 - 16,7", "HEA 120 - 19,9", "HEA 140 - 24,7", "HEA 160 - 30,4", "HEA 180 - 35,5", "HEA 200 - 42,3", "HEA 220 - 50,5", "HEA 240 - 60,3", "HEA 260 - 68,2", "HEA 280 - 76,4", "HEA 300 - 88,3", "HEA 320 - 97,6", "HEA 340 - 105", "HEA 360 - 112", "HEA 400 - 125", "HEA 450 - 140", "HEA 500 - 155", "HEA 550 - 166", "HEA 600 - 178", "HEA 650 - 190", "HEA 700 - 204", "HEA 800 - 224", "HEA 900 - 252", "HEA 1000 - 272")
	
	d = CreateUnoDialog(DialogLibraries.UltimusFree2.Dialog_tabellaferri)

  	Dim ListBox As Object
  	ComboBox=d.getControl("ComboBox1")
  	ComboBox.addItems(tabelle(), 0)

	ListBox=d.getControl("ListBox1")
	d.execute()

	Itab=ComboBox.Text

RIPRENDI:
	Select Case ComboBox.Text
	Case "Tondo per c.a."
		ListBox.removeItems(0, 100)
		ListBox.addItems(FerroTondo(), 0)
	Case "Profilati HEA"
		ListBox.removeItems(0, 100)
		ListBox.addItems(HEA(), 0)
	End Select
	d.execute()
	item = ListBox.SelectedItem
	If item ="" Then GoTo RIPRENDI:
End Sub
Il problema è che, dopo aver selezionato la tabella dalla combobox, perché sia visualizzata, devo per forza passare dal pulsante di OK. Quindi troppi click...
La soluzione di Gaetanopr farebbe al mio caso se non si poggiasse ai dati contenuti nelle celle.
In pratica il file di lavoro di LeenO è già per conto suo pieno di dati: aggiungerne altri (e di tabelle ce ne sono tante - es. http://www.oppo.it/tabelle/a_elenco_tabelle.html) significherebbe appesantire ancor più il template.
Preferirei rimanere esclusivamente sul lato macro.
Soluzioni?
Grazie ancora. Siete una risorsa indispensabile.

Re: [risolto] Interazione tra ComboBox e ListBox

Inviato: giovedì 15 ottobre 2015, 17:10
da patel
Non ho capito cosa vuoi, se non ti va bene la soluzione di Gaetano (veramente ottima) perché non usi l'altra ?

Re: [risolto] Interazione tra ComboBox e ListBox

Inviato: giovedì 15 ottobre 2015, 17:38
da giuserpe
patel, mi piacerebbe che fosse gestito tutto solo ed esclusivamente via macro senza leggere i dati dai fogli. E cioè riempire la listbox solo via macro. La soluzione di Gaetano è quello che fa per me, ma dovrei tenere nel template di LeenO una nuova ulteriore sheet da dedicare a questa funzione. Il file di partenza del computo metrco "vuoto" pesa 230kb essendo dotato già di una sua infrastruttura. Non vorrei aggiungere ancora altri dati...

Re: [risolto] Interazione tra ComboBox e ListBox

Inviato: giovedì 15 ottobre 2015, 17:50
da patel
continuo a non capire, la mia soluzione non usa il foglio

Re: [risolto] Interazione tra ComboBox e ListBox

Inviato: giovedì 15 ottobre 2015, 17:54
da giuserpe
patel ha scritto:continuo a non capire, la mia soluzione non usa il foglio
Sì, è vero, ma una volta scelta la voce nella ComboBox la Listbox non viene aggiornata al volo... non so se mi spiego.
Ripeto: tocca dare OK al Dialog per vedere la ListBox aggiornata, mentre con la soluzione di Gaetano l'aggiornamento è immediato.

Re: [risolto] Interazione tra ComboBox e ListBox

Inviato: giovedì 15 ottobre 2015, 18:11
da Gaetanopr
giuserpe ha scritto: Sì, è vero, ma una volta scelta la voce nella ComboBox la Listbox non viene aggiornata al volo... non so se mi spiego.
Ripeto: tocca dare OK al Dialog per vedere la ListBox aggiornata, mentre con la soluzione di Gaetano l'aggiornamento è immediato.
E' solo questione di impostazione della macro, devi scomporre la macro in due, la prima apre il dialog e carica la combobox la seconda invece riempe la listbox dopo aver effettuato la scelta, non puoi gestire questi due eventi con una sola macro
Ti riallego il file con la TUA macro modificata per funzionare in tal senso

Re: Interazione tra ComboBox e ListBox

Inviato: giovedì 15 ottobre 2015, 18:14
da giuserpe
Gaetanopr, è perfatta!
Grazie