Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    117

    [VB6] Verificare se si e' caricato un oggetto indicizzato

    Salve a tutti,
    ho una domanda sul visual basic 6.

    Si consideri il seguente esempio:

    Creo un pulsante indicizzato di nome Pulsante e poi imposto Visible su False.

    Attraverso il comando :

    Load Pulsante(1)
    Pulsante(1).Visible = True

    Carico il pulsante con Index 0 e lo rendo visibile.

    Fin qui non ci piove...
    ...pero' consideriamo tale caso:

    io carico 5 pulsanti e li rendo visibili :

    Load Pulsante(1)
    Pulsante(1).Visible = True

    Load Pulsante(2)
    Pulsante(2).Visible = True

    Load Pulsante(3)
    Pulsante(3).Visible = True

    Load Pulsante(4)
    Pulsante(4).Visible = True

    Load Pulsante(5)
    Pulsante(5).Visible = True

    dopodiche ne scarico il quarto:

    Unload Pulsante(4)

    a questo punto facendo finta che debba caricare un nuovo pulsante:

    vi e' la possibilità di capire quali pulsanti sono stati caricati (ossia quali index sono liberi e quali no) ?

    Non mi sembra una cosa corretta lasciare l'index 4 libero e magari occupare l'index 6.

    Teoricamente si potrebbe realizzare una funzione tipo:

    Dim t
    t = 0
    Sopra:
    t = t + 1
    If Pulsante(t) "e' stato gia' caricato" goto Sopra

    Load Pulsante(t)
    Pulsante(t).Visible = True

    ma non so quale sia la funzione "e' stato gia' caricato".

    Grazie in anticipo per la risposta.

  2. #2

    Re: [VB6] Verificare se si e' caricato un oggetto indicizzato

    [QUOTE][B]
    Load Pulsante(1)
    Pulsante(1).Visible = True

    Load Pulsante(2)
    Pulsante(2).Visible = True

    Load Pulsante(3)
    Pulsante(3).Visible = True

    Load Pulsante(4)
    Pulsante(4).Visible = True

    Load Pulsante(5)
    Pulsante(5).Visible = True
    [QUOTE]

    Sarebbe meglio (se sai la quantità):
    for i = 1 to 5
    Load Pulsante(i)
    Pulsante.Visible = True
    next i

    Per la funzione di controllo potresti fare così:
    for i = 0 to Pulsanti.count
    If pulsanti(i).visible = false then
    nuovoindex = i
    end if
    next i
    if nuovoindex = "" then 'nel senso che niente è stato cancellato
    load pulsanti(pulsanti.count + 1)
    elseif nuovoindex <> then
    load pulsanti(i)
    end if

    Siccome ora sto scrivendo senza visual basic e siccome ci sta che non abbia capito qualcosa dimmelo..ciao

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Questa semplice funzione

    codice:
    Private Function NewIndex(o As Object) As Long
        Dim i As Long
        Dim v As Boolean
        
        NewIndex = -1
        
        On Error Resume Next
        
        For i = 1 To 100
            v = o(i).Visible
            If Err Then
                Err.Clear
                NewIndex = i
                Exit For
            End If
        Next i
    End Function
    dovrebbe fare al caso tuo.

    La usi passando l'oggetto Pulsante e ri viene restituito il primo indice "libero" che puoi usare in una Load ...

    Ho presupposto che non ci siano piu' di 100 elementi presenti.
    Se "non c'e' posto" restituisce -1

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    117
    io veramente vorrei evitare On error next resume, non ho proprio alternative?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    E perche' mai vorresti evitare la On Error ?

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    117
    Il programma che sto sviluppando e' un prg tipo Winmx..che penso tu conosca.

    Incredibile a dirsi ma sembra che inserendo On error Next Resume alcuni pacchetti che mi spedisce il server vengano persi o meglio sembra che quando aggiungo On error next resume il prg perda tempo e quindi il buffer di lettura del winsock si riempie piu' di quanto si possa riempire e perdo dati.

    Lo so, puo' sembrare una cavolata cio' che sto dicendo pero' man mano che elimino le routine che richiedono per forza On error Next Resume e ricreandone altre, sembra che non perdi nulla.

    Il motivo in verita' non lo conosco per certo, fatto sta' che mi si presenta questo problema.

  7. #7
    Originariamente inviato da oregon
    Questa semplice funzione

    codice:
    Private Function NewIndex(o As Object) As Long
        Dim i As Long
        Dim v As Boolean
        
        NewIndex = -1
        
        On Error Resume Next
        
        For i = 1 To 100
            v = o(i).Visible
            If Err Then
                Err.Clear
                NewIndex = i
                Exit For
            End If
        Next i
    End Function
    Ma dal momento che se un oggetto è stato caricato è visibile, al posto del controllo dell'errore potresti verificare se v = true o false e poi agire come ti ha suggerito giustamente Oregon..

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Beh ... il fatto che nel programma ci sia un bug tale che la ricezione non avvenga correttamente mi sembra che tu debba affrontarlo e risolverlo ...

    La On Error non c'entra direttamente.

    Quasi certamente, se e' attiva una On Error e si verifica un errore durante l'esecuzione del codice della ricezione, questa non ti fa accorgere del problema ... ma il problema vero sta da un'altra parte.

    In ogni caso, non c'e' altra soluzione al tuo quesito e quindi ...

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da MdE2005
    Ma dal momento che se un oggetto è stato caricato è visibile, al posto del controllo dell'errore potresti verificare se v = true o false e poi agire come ti ha suggerito giustamente Oregon..
    Se l'oggetto non esiste, non puoi consultare la sua proprieta' Visible senza avere un errore ...

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Al limite, si potrebbe creare un vettore di interi da riempire con zeri se il controllo con l'indice equivalente non esiste e di uno se esiste.

    In questo modo potresti consultare il vettore per sapere gli indici non utilizzati senza usare la On Error ...

    Ma anche se questo metodo funzionera' bene, ti consiglio di capire dov'e' il problema di ricezione perche' lo ritroverai piu' avanti ... stanne certo ...

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 © 2026 vBulletin Solutions, Inc. All rights reserved.