Access Listbox: posizionamento elemento corrente

Anonimo
2016-10-14T13:01:11+00:00

Buona giornata a tutti,

piccolo problema: ho una List Box in un programma Access che contiene un elenco di nominativi (Antonio, Mario, Giovanni, ecc.). Se, nella list box, premo il tasto "M", viene selezionato "Mario", e così via. Per motivi di praticità operativa, sarebbe però comodo che il nome selezionato comparisse in testa, e non a metà o più avanti nella lista (cioè, come si vede a destra dell'esempio allegato).

Come si può risolvere il problema?

Grazie in anticipo

Ivo

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

2 risposte

Ordina per: Più utili
  1. Anonimo
    2016-10-15T11:33:12+00:00

    Grazie, Sandro.

    Dopo un po' di prove, ho trovato questa soluzione: in pratica, mi posiziono alla fine della lista e poi la scorro dall'inizio fino a quando trovo il primo carattere uguale a quello digitato (o maggiore), e mi posiziono lì


    Private Sub Lista_KeyDown(KeyCode As Integer, Shift As Integer)

    ' ListBox con 2 colonne (indice e dati): Larghezza: "0;2,5"

        Dim i As Integer, imax As Integer, wTasto As String

        wTasto = Chr(KeyCode): imax = Me.Lista.ListCount - 1

        Me.Lista.Selected(imax) = True

        i = 0: Do Until Left(Me.Lista.Column(1, i), 1) >= wTasto Or i >= imax: i = i + 1: Loop

        Me.Lista.Selected(i) = True

    End Sub


    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-10-15T06:51:48+00:00

    ciao Ivo,

    prova in questo modo.

    crea una tabella con un il solo campo nome o cognome.

    crea una textBox sulla form che chiami txtKey atta a memorizzare il codice del tasto che viene premuto, che puoi impostare come non visibile.

    su tasto giù della listbox invochi:

    Private Sub tuaListBox_KeyDown(KeyCode As Integer, Shift As Integer)

    If KeyCode <> Me.txtKey Or IsNull(Me.txtKey) Then

        DBEngine(0)(0).Execute "delete * from tuaTabellaNome", &H80

        DBEngine(0)(0).Execute "insert into tuaTabellaNome (nome) select nome from tuaTabellaOrigjnale where nome Like '" & Chr(KeyCode) & "*' order by nomeOriginale", &H80

        DBEngine(0)(0).Execute "insert into articolo (nome) select nome from tuaTabellaOrigjnale  where nome not Like '" & Chr(KeyCode) & "*' order by nomeOriginale", &H80

        Me.tuaListBox.RowSource = "select * from tuaTabellaNome"

        Me.tuaListBox.ListIndex = 0

    End If

    Me.txtKey = KeyCode

    End Sub

    in sostanza quando il tasto viene premuto rivedi il rowSource della listbox impostando i primi items ordinati per il tasto/lettera che stato premuto, in ordine alfabetico, e solo se il tasto premuto una seconda volta è diverso da quello premuto la volta precedente riassegni il rowSource della listbox stessa con la stessa modalità

    personalizza i nomi delle tabella e campi nel tuo scenario.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento