Newsgroup: it.comp.lang.visual-basic
Titolo: Il mio programma utile...non và!! :))

Salve...
Ok, faccio progressi, questa mattina ho cominciato a scrivere il primo
programma utile della mia carriera di programmatore Visual Basic :))
Dovrebbe essere un programmino MOOOLLTOOO semplice per gestire i
titoli azionari di mio padre (mi serviva anche un idea per un
interfaccia grafica + decente). E' uscito fuori un piccolissimo
problema :)) Provo a spiegarvi...ho una listbox (si dice così??) con
visualizzati tutti i titoli azionari di mio padre, selezionandone uno
e spingendo un pulsante, appare un altra finestra (il pulsante in
questione è quello che modifica le proprietà di quel titolo). Ora se
io volessi cancellarlo, quindi levarlo dalla listbox iniziale come
faccio? Ho provato a passare tramite un altro pulsante un valore nullo
a tutta la listbox, prevedendo che avrebbe potuto levare
tutto...cancellare tutti i titoli presenti, invece...non succede
assolutamente nulla!! Quello scelto non me lo leva, e poteva essere
prevedibile ma...non leva niente!! Sono due form...uno richiama l'
altro...madonna, ho spiegato con i piedi!! Vabbè, detto in due parole,
devo cancellare un valore presente in quella listbox. Se qualcuno mi
da una mano, gli mando tutti i file che devo chiedere anche una cosa
relativa all' interfaccia, quindi, se entrambi abbiamo la stessa cosa
davanti agli occhi...è più semplice :))
Fatemi sapere...grazie :))

Per eliminare un elemento da una listbox devi usare due metodi (uno a
scelta...)...
1- Se vuoi cancellare tutto fai: Listbox1.clear
2- Se vuoi eliminare un solo elemento: Listbox1.removeitem (Numero
dell'elemento da eliminare)
L'unico difetto di removeitem é che purtroppo ti rimuove l'elemento, ma non
il suo valore itemdata... Probabilmente a te ancora non interessa, ma se
qualcuno ha idea di come si possano togliere entrmabi senza cancellare tutta
la lista mi fa un favore...
            Ciao...
                Allanon

 davanti agli occhi...è più semplice :))
Nonono. Non lo sai che il vero scopo di questo newsgroup è mettere alla
prova la capacità di scrivere delle persone, e comunque di educarle a farlo?
In realtà i programmatori sono tutti latinisti (De Rerum Programmatoria),
fini dicitori Shakespeariani (2b or not 2b), e non si perdono nessuna
Enciclica Papale (for Papa=1 to n: next).
Per referenze, chiedere a Pal.
Ciao
*Roby*

>Usa il metodo RemoveItem.
Ok, fatto...ho fatto come mi avete detto, e in effetti funziona. Però
ho ancora due domande da porre.
a) Nella mia listbox ci sono 3 elementi (3 nomi) e ora riesco a
farglieli levare, li cancella proprio come volevo. Non sempre
succede (quasi sempre) 4 volte su 5 in base all' ordine di come levo i
nomi mi appare un messaggio di errore che dice: 
Errore di run-time: "5" 
Chimata di routine o argomento non valido.
Questo è quanto ho inserito nel codice:
Premetto: ci sono due form, uno principale che mostra in una listbox
(List1) tutti i titolo, spingendo sul pulsante "Modifica Titoli"
appare il secondo form in cui Text1.Text è una label che mostra il
nome del titolo scelto, (appare nel secondo form) cliccando su un
bottone presente nel secondo form si dovrebbe cancellare un titolo
nella listbox (List1) presente in quello principale.
Private Sub CmdEliminaTitolo_Click()
    If Text1.Text = "PIPPO" Then
        FrmElenco.List1.RemoveItem (0)
    ElseIf Text1.Text = "PLUTO" Then
        FrmElenco.List1.RemoveItem (1)
    ElseIf Text1.Text = "PAPERINO" Then
        FrmElenco.List1.RemoveItem (2)
    End If
End Sub
Riporto qui di seguito una specie di tabellina che ho fatto io, e vi
faccio vedere quando è che non funziona:
PIPPO, PLUTO E PAPERINO equivalgono ai nomi presenti nella listbox
(dove pippo è il primo, pluto il secondo e paperino il terzo) e la
sequenze 1,2 e 3 l' ordine in cui li cancello
_____|__PIPPO__| __PLUTO__|__PARERINO__|
__A__|____1____|_____2_____|__3 - ERRORE_|
__B__|____3____|_____2_____|______1______|
__C__|____2____|_____1_____|__3 - ERRORE_|
__D__|____/____|_____1_____|__2 - ERRORE_|
__E__|____1____|_____/_____|__2 - ERRORE_|
Nel caso A mi segna errore sulla riga:
	FrmElenco.List1.RemoveItem (1)
nel caso B non ho nessun tipo di errore,
nel caso C, D ed E mi segna errore sulla riga:
	FrmElenco.List1.RemoveItem (2)
Se io volessi leravarli tutti, funziona solo se li cancello dall'
ultimo al primo. Ora non so se capiterà mai una cosa del genere, però
intato ho già trovato un malfunzioamento. Perchè accade questo?
Passiamo alla seconda domanda.
b) di seguito ho modificato la struttura IF...THEN in questo modo:
	If Text1.Text = FrmElenco.List1.Item(0) Then
		FrmElenco.List1.RemoveItem (0)
    	ElseIf Text1.Text = FrmElenco.List1.Item(1) Then
    		FrmElenco.List1.RemoveItem (1)
    	ElseIf Text1.Text = FrmElenco.List1.Item(2) Then
		FrmElenco.List1.RemoveItem (2)
	End If
In questo caso il primo nome che seleziono e gli dico di cancellare mi
appare un messaggio di errore che dice:
Errore di compilazione:
impossibile trovare il metodo o il membro ol dei dati
E di seguito mi evindenzia sempre di giallo la riga:
Private Sub CmdEliminaTitolo_Click()
e poi mi evidenzia in blu :
.Item
Anche qio chiedo a vaoi; è forse sbagliato sintatticamente quello che
ho scritto??




 __B__|____3____|_____2_____|______1______|
Questo avviene perchè le posizioni nella lista non sono statiche. Quando
cancelli l'elemento numero 1, in realtà si rinumerano tutti gli elementi
preesistenti., quindi il 2 diventa 1 e il 3 diventa 2.
Nel caso A, cancelli prima Pippo, e poi Paperino (che è diventato 2 da 3 che
era), quindi cerchi di cancellare un elemento numero 3 che non esiste, dato
che adesso hai solo l'elemento 1 (che tra parentesi è Pluto).
Questo non avviene nel caso B perchè cancellando dal fondo all'inizio non
avviene la rinumerazione.
Funzionerebbe tutto anche se cancellassi per 3 volte l'elemento 1.
Tutto chiaro adesso?
Comunque la cosa migliore è che non accedi agli elementi basandoti su una
posizione predeterminata, ma usi la posizione corrente, che ottieni con la
proprietà ListIndex. Ovvero, se vuoi cancellare l'elemento attualmente
selezionato fai:
Listbox.RemoveItem ListBox.ListIndex
Controlla però prima che ListIndex sia  maggiore di -1
Ciao
*Roby*
P.S.
Prima di buttarti a testa bassa nella programmazione, guardati almeno una
volte tutte le proprietà e i metodi dell'oggetto che usi (nel caso specifico
il ListBox) e i relativi esempi, e se c'è qualche cosa che non capisci
chiedi pure.

 __B__|____3____|_____2_____|______1______|


ho scritto??
F1 -> Help in linea: Le listbox non hanno il metodo Item, ma List.
Ciao