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

    [VB.NET] Select parziali su textbox

    Buongiorno. Vorrei implementare una funzione sui miei textbox e vi spiego quale.
    Digito la prima lettera sulla text ed automaticamente mi scrive il primo nome del DB che trova, poi scrivo la seconda lettera e mi propone il primo nome che inizia con quelle lettere e così via. La particolarità è che dovrebbe lasciarmi le lettere che scrivo io DESELEZIONATE mentre il resto del nome SELEZIONATO. Ho allegato un'immagine per spiegare meglio, spero si veda.
    Io cmq ho buttato giù una mia procedura, funziona però la vedo lenta... c'è qualche tecnica più performante? Grazie

    Private Sub TextBox2_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyUp
    Dim a As Integer
    Dim strSQL As String
    lunghezza = Len(TextBox2.Text)
    strSQL = "SELECT motonave" _
    & " , bandiera" _
    & " , agenzia" _
    & " , terminal" _
    & " , ID" _
    & " FROM tabellamotonavi " _
    & " WHERE motonave LIKE '" & TextBox2.Text & "%'"
    MioDbCmdMN.CommandText = strSQL
    MioDbRst = MioDbCmdMN.Execute
    esito = 0
    If e.KeyCode < 32 Or e.KeyCode > 126 Then Exit Sub
    With MioDbRst
    If .EOF Then Exit Sub 'non trovato esce dalla sub
    For a = 1 To Len(TextBox2.Text)
    If Mid$(TextBox2.Text, a, 1) = Mid$(.Fields("motonave").Value, a, 1) Then
    esito = 1
    Else
    esito = 0
    Exit For
    End If
    Next a
    If esito = 1 Then
    TextBox2.Text = TextBox2.Text + Mid$(.Fields("motonave").Value, lunghezza + 1)
    TextBox2.SelectionStart = lunghezza
    TextBox2.SelectionLength = Len(TextBox2.Text)
    End If
    End With
    End Sub
    Immagini allegate Immagini allegate

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Invece di interrogare la tabella ad ogni tasto premuto, carica prima i dati in un insieme (array, list, ...) ed interroga l'insieme.

    Ovviamente, ammesso che tu non sappia già che la tabella sia soggetta a frequenti modifiche.


  3. #3
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Dimenticavo LINQ!

    Premessa: aggiungi un textBox1 ed un label1 sul form.

    Supponiamo di aver caricato i valori in un array di stringhe:
    codice:
    Dim dataSource As String() = {"primo", "secondo", "terzo", "quarto", "quinto", "sesto", "settimo", "ottavo", "nono", "decimo"}
    nell'evento KeyUp del textbox puoi fare così:
    codice:
        Dim searchTerm As String = textBox1.Text
        lunghezza = textBox1.TextLength
    
        Dim matchQuery = From word In dataSource
                      Where word.StartsWith(searchTerm)
                      Select word
    
        If matchQuery.ToString() <> "" Then
            label1.Text = matchQuery(0).ToString()
        End If
    Quindi procedi con la selezione del testo :
    codice:
        textBox1.Text = matchQuery(0).ToString()
        textBox1.SelectionStart = lunghezza
        textBox1.SelectionLength = textBox1.TextLength
    Può essere utile sapere che matchQuery è un array che conterrà tutte le occorrenze corrispondenti al testo digitato. Ovvero, se digiti 'q' conterrà:

    matchQuery(0)="quarto"
    matchQuery(1)="quinto"

    P.S.
    Consiglio: mi sembra che tu venga da VB6, almeno il tuo codice fa supporre questo.
    Cerca di liberarti 'mentalmente' dallo stile VB6 e di 'studiarti' per benino le enormi potenzialità del .NET ad esempio metodi, proprietà ed eventi del TextBox.
    Come vedi con quattro righe di codice fai tutto, meglio e con più semplicità.
    Ciò si traduce anche in codice più efficiente, leggibile e soprattutto manutenibile.



  4. #4
    Grazie tante Gibra per la risposta... hai ragione provengo dal Vb6 Adesso vedo di applicare il tuo codice.

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.