Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Utente di HTML.it L'avatar di Rickycast
    Registrato dal
    Apr 2007
    residenza
    CHIERI (TO)
    Messaggi
    263

    [VB.NET] Rilevare il contenuto di un Item nel controllo ListBox

    Vorrei ripercorrere in VB NET quello che potevo fare in VB6 con le ListBox. In VB6 avevo una ListBox che dopo averla popolata, mi consentiva con un Click del mouse (ovviamente) di cambiare lo stato di un qualsiasi "Item" e contestualmente di modificare un valore Booleano nella Tabella di origine della lista. Questo per poter eseguire in seguito una Query selezionando solo i Record con il valore Booleano voluto. Per fare questo però, ho bisogno di conoscere il "valore" di quello specifico Item e in VB NET non so come fare. Qui i codice VB6 che vorrei ripercorrere in VB NET.

    codice:
    Private Sub ListaAgenti_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
        Dim Posiz
        Posiz = ListaAgenti.ListIndex
        NomeAgente = Trim(ListaAgenti.List(Posiz))
    
        ListaAgenti_Esegui
    End Sub
    
    ............
    
    Private Sub ListaAgenti_Esegui()                     
    On Error GoTo errore_ListaAgenti_Esegui
    
        Dim rcrdstAgenti As ADODB.Recordset, rcrdstMix As ADODB.Recordset
        Dim sSQL As String
        Dim i As Integer
    
        Set rcrdstAgenti = New ADODB.Recordset
        Set rcrdstMix = New ADODB.Recordset
    
        ' Porta a 0 o a -1 la Cella "Selezionato" dell'Agente su cui si è fatto "click"
        
        sSQL = "SELECT DISTINCTROW Agente, Selezionato From Agenti ORDER BY Agente"
        rcrdst.Open sSQL, ConnettiDBlocale, adOpenStatic, adLockOptimistic
    
        rcrdstAgenti.MoveFirst
        For i = 0 To rcrdstAgenti.RecordCount - 1
            If rcrdstAgenti("Agente") = NomeAgente Then
                If rcrdstAgenti("Selezionato") = 0 Then
                    Selez = -1
                    ListaAgenti.Selected(i) = True
                ElseIf rcrdstAgenti("Selezionato") = -1 Then
                    Selez = 0
                    ListaAgenti.Selected(i) = False
                End If
            End If
            rcrdstAgenti.MoveNext
        Next i
    
        Exit Sub
    errore_DeselezionaTuttiAgenti:
        MsgBox "Errore nella Sub ''..........'': " & Err.Number & " - " & Err.Description
    End Sub

    Non sono però riuscito a fare la stessa cosa in VB NET. Ho anche l'impressione che la ListBox di VB NET sia completamente diversa da quella di VB6 e che quindi non si possa usarla per fare quello che mi serve.
    Qualcuno può aiutarmi?

  2. #2
    Utente di HTML.it L'avatar di patel
    Registrato dal
    Jan 2008
    Messaggi
    1,994
    Quote Originariamente inviata da Rickycast Visualizza il messaggio
    .....Ho anche l'impressione che la ListBox di VB NET sia completamente diversa da quella di VB6 e che quindi non si possa usarla per fare quello che mi serve.
    Qualcuno può aiutarmi?
    Se cerchi in rete "vb.net popolare listbox" troverai molti esempi, ancora di più se lo scrivi in inglese

  3. #3
    Utente di HTML.it L'avatar di Rickycast
    Registrato dal
    Apr 2007
    residenza
    CHIERI (TO)
    Messaggi
    263
    Grazie, proverò.
    Però ho già fatto diverse ricerche e la sola informazione interessante che ho trovato riguarda l'utilizzo di "ListBox.SelectedItem" e "ListBox.SelectedIndex" che però non risolvono assolutamente il problema che ho illustrato. Almeno nel modo di utilizzo da me immaginato.

  4. #4

  5. #5
    Utente di HTML.it L'avatar di Rickycast
    Registrato dal
    Apr 2007
    residenza
    CHIERI (TO)
    Messaggi
    263
    Ho utilizzato l'esempio che mi indichi, che però riporta una serie di problemi:
    Questo il banale codice copiato:

    codice:
        Private Sub ListaAgenti_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListaAgenti.SelectedIndexChanged
    
            Dim curItem As String = ListaAgenti.SelectedItem.ToString()
    
        End Sub
    che però genera subito l'errore "Riferimento a un oggetto non impostato su un'istanza di oggetto" nella Sub che carica i valori nella ListBox. Se blocco con un If l'esecuzione della Sub ListaAgenti_SelectedIndexChanged, l'errore non compare.

    codice:
        Private Sub ListaAgenti_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListaAgenti.SelectedIndexChanged
    
            If AspettaAgenti = -1 Then
    
                Dim curItem As String = ListaAgenti.SelectedItem.ToString()
                MsgBox(curItem)
    
            End If
    
        End Sub
    Poi, selezionando un qualsiasi Item la Sub viene eseguita senza problemi ma Deselezionando quello stesso Item si genera l'errore in allegato


    Mi pare di capire che posso Selezionare un Item ma NOn deselezionarlo.
    Cosa sto sbagliando? vorrei solo rilevare il valore dell'Item o la sua posizione, .....
    Immagini allegate Immagini allegate

  6. #6
    Utente di HTML.it L'avatar di patel
    Registrato dal
    Jan 2008
    Messaggi
    1,994
    devi inserire il codice in un blocco try catch in modo da intercettare l'errore, se deselezioni non esiste un selected item

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Oppure controlli in maniera opportuna

    codice:
        Private Sub ListaAgenti_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListaAgenti.SelectedIndexChanged
            Dim curItem As String = ""
    
    
            If Not (ListaAgenti.SelectedItem Is Nothing) Then
                curItem = ListaAgenti.SelectedItem.ToString()
                MessageBox.Show(curItem)
            End If
        End Sub
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it L'avatar di Rickycast
    Registrato dal
    Apr 2007
    residenza
    CHIERI (TO)
    Messaggi
    263
    Credo, per le mie esigenze, che sia molto più semplice utilizzare una CheckedListBox. La differenza grafica è che c'è la casella del Check, ma non è un problema, mentre una banale stringa "MsgBox(ListaAgentiChek.SelectedItem.ToString) " restituisce sempre il valore dell'Item che si sta selezionando o deselezionando. Credo, salvo ulteriori verifiche, che sceglierò questa soluzione.
    Aspetto comunque ulteriori considerazioni.
    Grazie a tutti.

  9. #9
    Utente di HTML.it L'avatar di Rickycast
    Registrato dal
    Apr 2007
    residenza
    CHIERI (TO)
    Messaggi
    263
    Devo ricredermi, anche CheckedListBox ha problemi che per ora preferisco non affrontare.
    Tornando alla soluzione proposta da Oregon, è evidente che funziona, però io sto cercendo altro: la soluzione di Oregon non da problemi o errori se l'Item non è selezionato, ma non me ne fa vedere il contenuto. In sostanza ci vorrebbe una proprietà NotSelectedItem per rilevare il valore in questo caso.
    Io vorrei solo conoscere l'indice (la posizione) o il contenuto sia nel caso "selezionato" che nel caso "non selezionato", semplicemente perché ci ho fatto Click sopra. Vorrei quindi memorizzare questo valore per poterlo utilizzare altrove.
    Qualcuno ha qualche idea? mi sembra strano che una proprietà che esiste in VB6 non abbia un equivalente in VB .NET

    codice:
    'Codice VB6
    
    Private Sub ListaAgenti_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
        Dim Posiz
        Posiz = ListaAgenti.ListIndex
        NomeAgente = Trim(ListaAgenti.List(Posiz))
    
    End Sub

    preferisco credere che io non la so trovare.

  10. #10
    Utente di HTML.it L'avatar di Rickycast
    Registrato dal
    Apr 2007
    residenza
    CHIERI (TO)
    Messaggi
    263
    In attesa che qualcuno mi aiuti con il problema di cui sopra, sono tornato ad utilizzare CheckedListBox. Ho risolto i miei problemi principali e l'ho fatto funzionare come voglio. Però, (c'è sempre un però,...), ho disegnato una CheckedListBox più lunga di quanto non serva per visualizzare tutti gli Item, così al di sotto rimane uno spazio vuoto che, quando ci faccio click sopra per sbaglio, trova nel codice la seguente stringa

    codice:
    MsgBox(ListaAgentiChek.SelectedItem.ToString)

    e genera, giustamente, l'errore "Riferimento a un oggetto non impostato su un'istanza di ogetto".
    Oltre che ridurre l'altezza del CheckedListBox, qualcuno sa se c'è qualche soluzione di codice per evitare questo errore?
    Grazie in anticipo'

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