Newsgroup: it.comp.lang.visual-basic
Titolo: Listbox a più campi in visual basic

Ciao,
si può dividere una listbox in almeno 2 campi?
Grazie in anticipo per la risposta,
Marco.

 ha scritto nel messaggio
news:fbf08537.03012...@posting.google.com...

ListView + F1
CIao
Andrea

 si può dividere una listbox in almeno 2 campi?
A parte usare la listview, che ha qualche funzionalità in più, puoi inserire
nel listbox una stringa composta dalla concatenazione di due campi, e
risolvi tutto.
Fra i due campi metti il numero di spazi che serve per incolonnare tutto
correttamente.
Ciao
Alberto

 tutto correttamente.
A patto di usare un font a spaziatura fissa, giusto?
Salutoni
Sergio


No.
Io il font lo scelgo a design-time come mi piace di più.
Da codice, leggo lo spazio (in twips) occupato dalla prima stringa, leggo lo
spazio (in twips) occupato dalla seconda stringa, leggo lo spazio (in twips)
occupato da uno spazio, e determino quanti spazi servono a sinistra, in
mezzo, ecc...
Ciao
Alberto

 servono a sinistra, in mezzo, ecc...
Macchinosetto ma certamente possibile... ma riesci ad incolonnarli
"esattamente"?
Insomma, dal punto di vista grafico, il risultato è gradevole?
Salutoni
Sergio


Pressochè perfetto.
Con alcune risoluzioni, può succedere che qualche riga sia sfasata di un
pixel, ma, salvo esigenze particolari, non è significativo.
Avevo già postato tutto il codice che fa questa cosina in pochissime righe.
Se cerchi con google lo trovi (prova con 'textwidth').
Ciao
Alberto

 righe.
umh, sono pigro e non ho voglia di andare a cercarlo :-)
però c'è qualcosa che non mi torna, dal punto di vista logico: se devo mettere
degli spazi per "allineare" dei dati, la mia massima risoluzione è data
dall'ampiezza dello spazio, quindi direi che in questo caso gli allineamenti
possono sballare di mezzo spazio in più o in meno. Le cose possono comunque
andare come dici tu se:
1) lo spazio ha comunque una dimensione di due pixel
2) la dimensione dei caratteri, nei font a spaziatura progressiva, è sempre
multiplo della dimensione dello spazio.
Sbaglio qualcosa?
Salutoni
Sergio

 perň c'č qualcosa che non mi torna, dal punto di vista logico:
Dicendo 'un pixel', intendevo una cosa minima...
Considera che, nei font a spaziatura proporzionale, lo spazio č una cosa
veramente minima.
Comunque, la cosa č molto piů semplice da provare che da spiegare.
Rimarrai stupito della semplicitŕ e dell'ottimo risultato.
Ciao
Alberto

 umh, sono pigro e non ho voglia di andare a cercarlo :-)
Copioincollo da un mio progetto (alcune cose non riguardano
l'incolonnamento, ma le lascio per chiarezza).
Sulla form serve la listbox LISTA_ARTICOLI e una picturebox invisibile
PICTURE1.
Private Sub Popola_Lista_Articoli()
Dim n As Long
Dim Spazi As Long
Dim indice As Long
Dim Stringa As String
n = Apri_Recordset(Ccn, RCS_Articoli, "select * from catalogo_articoli order
by codice")
Select Case n
    Case Is < 0
        Call MsgBox("Un errore ha impedito di ricavare l'elenco degli
Articoli.", vbOKOnly + vbMsgBoxSetForeground, "Gestione Articoli")
        Exit Sub
    Case 0
        Call MsgBox("L'elenco degli Articoli risulta vuoto.", vbOKOnly +
vbMsgBoxSetForeground, "Gestione Articoli")
        Exit Sub
End Select
Lista_Articoli.Clear
n = 0
indice = 0
'Imposto la PictureBox come la ListBox
Picture1.Font = Lista_Articoli.Font.Size
Picture1.FontBold = Lista_Articoli.Font.Bold
Picture1.FontItalic = Lista_Articoli.Font.Italic
Picture1.FontName = 
Lista_Articoli.Font.Name
RCS_Articoli.MoveFirst
Do While Not RCS_Articoli.EOF
    n = n + 1
    'Creazione stringa per ListBox
    Stringa = LEFT(RCS_Articoli.Fields.Item("codice").Value, 32)
    Spazi = (2800 - Picture1.TextWidth(Stringa)) \ Picture1.TextWidth(" ")
    If Spazi < 0 Then Spazi = 0
    Stringa = Stringa & Space(Spazi) & "- " &
LEFT(RCS_Articoli.Fields.Item("nome").Value, 32)
    Spazi = (5600 - Picture1.TextWidth(Stringa)) \ Picture1.TextWidth(" ")
    If Spazi < 0 Then Spazi = 0
    Stringa = Stringa & Space(Spazi) & "- " &
LEFT(RCS_Articoli.Fields.Item("descrizione").Value, 50)
    'A fine stringa aggiungo l'UniqueIdentifier (molto a destra, così non si
vede)
    Spazi = (10000 - Picture1.TextWidth(Stringa)) \ Picture1.TextWidth(" ")
    If Spazi < 0 Then Spazi = 0
    Stringa = Stringa & Space(Spazi) & "- " &
CStr(RCS_Articoli.Fields.Item("ID_Articolo").Value)
    Lista_Articoli.AddItem Stringa
    'Se il record ha descrizione vuota mi memorizzo l'indice
    If Trim(RCS_Articoli.Fields.Item("nome").Value &
RCS_Articoli.Fields.Item("codice").Value) = vbNullString Then indice = n
    If Not RCS_Articoli.EOF Then RCS_Articoli.MoveNext
Loop
'Posiziono la selezione su un record vuoto, se c'è.
Lista_Articoli.ListIndex = indice - 1
End Sub