Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Problema con VB6

    Ciao a tutti!!!

    Sono alle prime armi con la programmazione in VB6 e ho un problemino da risolvere!
    In una listbox ho inserito una lunghissima lista di nomi a cui vorrei fossero associati dei numeri con la virgola che compariranno in una seconda listbox (list2).
    La soluzione migliore finora è stata quella di associare alla listbox1 un file txt e alla list2 un altro file di testo utilizzando il metodo itemdata.
    La list2 riconosce il file di testo ma mi riporta il numero approssimato sempre senza virgola.

    Un esempio

    pippo = 1.1
    topolino = 2.3
    minni = 6.8

    Nella list1 inserisco i nomi, mentre nella list2 compaiono i numeri approssimati (x eccesso o difetto), ho provato anche a dichiarare diversi tipi di variabile (tipo double,single ecc...) ma non succede nulla. Qualcuno sa come fare?Preferibilmente senza l'utilizzo di Access.

    Vi invio il codice:

    codice:
    Dim listname As String
    Dim densità As Double
    Open "C:\Documents and Settings\ISA\Desktop\antonio\programmazione\comandi vba\people.txt" For Input As #1
    Open "C:\Documents and Settings\ISA\Desktop\antonio\programmazione\comandi vba\people2.txt" For Input As #2
    Do Until EOF(1)
       Input #1, listname
       Input #2, densità
       With List1
          .AddItem listname
          .ItemData(.NewIndex) = densità
       End With
    Loop
    Close #1
    Close #2
    Grazie mille

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317

    Moderazione

    Il 100% degli utenti che usano VB6, quando postano in questo forum hanno un problema con VB6. Quindi scrivere "Problema con VB6" è perfettamente inutile: non dà alcuna informazione sul problema specifico.

    Inoltre, come indicato nel Regolamento interno il codice va postato indentato usando gli appositi tag CODE.

    Ho sistemato io.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    La guida MSDN di VB6 indica espressamente che l'ItemData è un Indice e deve essere un numero intero .


  4. #4
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Non sò se ho compreso appieno il problema (sopratutto cosa centra Access?) ma se si tratta di troncare una cicfra decimale potresti utilizzare la funzione Format(); ad esempio nel seguente modo avresti la cifra suddivisa con il punto per le migliaia e la virgola che divide due cifre decimali:
    codice:
    Format(densità, "#,##0.00")
    La funzione dà l'approsimazione della seconda cifra decimale per difetto o per eccesso.
    LM

  5. #5
    @ gibra

    Ciao, esiste quindi, oltre ad itemdata, un modo per associare ai valori pippo,topolino,minni dei numeri da inserire nella list2?
    i valori della lista sono molti e volevo trovare una procedura veloce per l'inserimento dei dati.


    Grazie mille

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da ilsanto18
    @ gibra

    Ciao, esiste quindi, oltre ad itemdata, un modo per associare ai valori pippo,topolino,minni dei numeri da inserire nella list2?
    i valori della lista sono molti e volevo trovare una procedura veloce per l'inserimento dei dati.
    Permettimi qualche annotazione, non so che applicazione tu stia creando, quindi quanto segue potrebbe non essere applicabile, ma:
    1)
    Già il fatto di scrivere valori relativi alla stessa entità (nome) in due file diversi, mi da l'impressione di correre un rischio inutile e percoloso: infatti se perdi anche un solo valore in uno dei 2 file, sballano tutte le accoppiate.
    Sarebbe meglio una tabella di un database. Se non usi un database, preferirei un file strutturato in formato XLM oppure INI.
    2)
    Quando scrivi che i valori della lista sono molti ho l'impressione che il ListBox non sia la strada giusta, ma questo dipende da quanto lunga è la lista e da cosa devi farci.
    Di norma una lista serve all'utente per selezionare un valore, se la lista è troppo lunga, si è costretti a scorrere molti elementi prima di trovare quello desiderato e ne soffrono gli occhi dell'utente che si spazientisce (a ragione).

    A parte queste considerazioni, questa potrebbe essere una soluzione:
    usare un array in parallelo al ListBox.
    Quando aggiungi un Nome al ListBox, carichi il valore in un array che avrà lo stesso indice dell'elemento aggiunto. Ovvero (ho scritto al volo per cui VERIFICA!!!!)

    codice:
        Rem Inserire nella sezione Dichiarazioni del Form:
        Dim Valori() As Long
        Dim idx as long 
    
        Rem 
        Rem Tuo codice
        Rem ..........
    
        With List1 
            .AddItem listname
    
            idx = .NewIndex
            Redim Preserve Valori(idx)
            Valori(idx) = densità
        End With
    
        Rem ..........
        Rem restante Tuo codice
    In tal modo avrai che con lo stesso indice potrai leggere sia il nome nel ListBox che la densità nell'array

    Nome = List1.List(3)
    Densita = valori(3)


  7. #7
    grazie per la risposta,adesso provo e ti dico.

    Ad ogni modo l'applicazione consiste nel calcolo della trasmittanza dei muri ossia quanto disperde una parete.
    ho bisogno,quindi, di sapere la stratigrafia all'interno della parete; nella list1, ogni tipo di materiale ha un valore di resistenza termica, e quando lo seleziono,vorrei che la list2 restituisca il valore della resistenza termica di quello specifico materiale(che è solitamente un numero decimale).L'utente ha bisogno di consultare la list1 anche se lunga.

    Non so se mi sono spiegato...

  8. #8
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Ciao ilsanto18,
    vedi se così risolvi il tuo problema:

    codice:
    Option Explicit
    Private Sub List1_Click()
    
    ' Sincronizza gli indici:
         List2.ListIndex = List1.ListIndex
        'List2.TopIndex = List1.TopIndex
    End Sub
    '---------------------------------------
    Private Sub Command1_Click()
        Dim i As Long
        Dim Entry1 As String
        Dim Entry2 As Double
        
    ' Crea un elemento:
        Entry1 = "Elemento"
        Entry2 = 10.2545
    
    ' Inserisce le descrizioni ed i relativi valori:
        For i = 0 To 10
            List1.AddItem Entry1 & Space(1) & i
            List2.AddItem Entry2 + i
        Next
    End Sub
    Rimane da inserire le descrizioni dei materiali ed i relativi valori, ma penso che ti abbia già risolto. Ti consiglio, comunque, di utilizzare gli indici per essere sicuro che le List siano in sempre in sincrono.
    Fammi sapere.

    PS: Forse così é più chiaro:
    codice:
    For i = 0 To 10
            List1.AddItem Entry1 & Space(3) & i
            List2.AddItem Entry2 + i & Space(3) & i
        Next
    LM

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.