PDA

Visualizza versione completa : scroll automatico su due listbox della stessa form.


mandrak
11-08-2009, 11.47.32
Salve a tutti. :)
Avrei quesito vb5 & vb6.
In una form ho inserito due listbox.
(Ho deciso così per avere due colori diversi come colonne, dato che in una listbox sola non si può fare).
Prendendo dei dati da un DB, visualizzo i dati in entrambe le listbox, e nel
particolare, nella prima una data e nella seconda una informazione relativa
alla data della listbox a fianco.
Mi servirebbe che spostandomi con il mouse o i tasti su e giu, in una listbox, automaticamente si spostasse la parte evidenziata anche nell'altra listbox

Potete aiutarmi ?

Grazie

mandrak
24-08-2009, 13.55.38
Nessuno mi può essere d'aiuto ?

LoryOne
24-08-2009, 18.50.00
In pratica tu vorresti che ad esempio se l'utente seleziona il secondo elemento della prima lista, il selettore della seconda si sposti automaticamente sul secondo elemento della seconda lista ?

mandrak
25-08-2009, 10.17.00
Ciao
Si vorrei ottenete quello, ma non so come.

mandrak
27-08-2009, 17.21.16
Nessuno mi può aiutare ?
:crying:

LoryOne
27-08-2009, 21.25.51
Private Sub Form_Load()
Dim I As Long

For I = 1 To 5
List1(0).AddItem I
List1(1).AddItem I
Next
End Sub

Private Sub List1_Click(Index As Integer)
If Index = 0 Then List1(Index + 1).ListIndex = List1(Index).ListIndex
End Sub

LoryOne
27-08-2009, 22.01.10
Se vuoi fare in modo che solo i tasti freccia su e giu spostino il selettore, aggiungi queste poche righe:

Private Sub List1_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyUp, vbKeyDown
Case Else: KeyCode = 0
End Select
End Sub

Ps: Era fin troppo facile ... non disperarti per così poco ;)

mandrak
28-08-2009, 16.23.42
Con questo esempio ho fatto un grosso passo in avanti.
:act:
Ora mi servirebbe che cliccando sulla barra di scorrimento verticale
di una della listbox, automaticamente scrollasse anche quella nell'altra
listbox, sia in un senso che nell'altro.
:)

LoryOne
29-08-2009, 12.45.37
Beh, non è poi così difficile.
Come vedi dagli esempi precedenti, è al verificarsi di un evento che il controllo sull'oggetto può essere passato all'utente affinchè possa agire su di esso.
Ad ogni oggetto possono essere assegnate proprietà, metodi ed eventi.
L'evento possiede un'interfaccia coerente con la tipologia stessa dell'evento che si verifica, in modo che l'utente possa scrivere codice d'azione referente solo a quell'evento.
Scorrendo fra i metodi e gli eventi dell'oggetto List, troverai l'evento Scroll.
All'interno di tale evento potrai scrivere il codice che a te serve: Cerca TopIndex.
Il codice lo devi scrivere tu, io ti ho già messo sulla strada giusta. ;)

mandrak
31-08-2009, 17.20.12
Con il tuo grande aiuto ho risolto i miei problemi.
Le due ListBox sono sincronizzate.
per l'ultimo problema ho aggionto :

Private Sub List2_Scroll()
List1.TopIndex = List2.TopIndex
End Sub

Con queste istruzioni le due listbox si spostano in contemporanea.
Grazie di tutto.
:) :act:

mandrak
01-09-2009, 17.00.05
Per completare "l'opera" nella lista delle date ho inserito la possibilità di "fleggare" la riga con checkbox.
Automaticamente si è sfalsata la lista della date rispetto all'altra lista.
In poche parole nel caso di click su di una riga, nella lista a fianco si evidenzia una riga
non nello stesso punto.
Ho provato molte combinazioni di di stile di carattere e dimensioni ma non combacia mai.
Come posso "allineare" nuovamente le due liste ?
La checkbox mi serve solamente nella lista di sinistra.

mandrak
07-09-2009, 16.37.33
nessuno ha un'idea brillante di come posso allineare nuovamente la visualizzazione delle due listbox ?

LoryOne
07-09-2009, 18.35.53
Probabilmente non combacia perchè la checkbox ha un'altzza in pixels superiore al carattere che ha di fianco.
List box è un controllo standard di VB ... cerca documentazione per accedere alla lista attraverso le API di sistema ...

Ps: Un buon inizio : http://www.aleax.it/TutWin32/t42.htm
Il codice è in C, ma in Vb è ancor più semplice: char è string, int è long, RECT è una struttura e al chiamata alle API di sistema avviene dopo un declare ...
Forse hai ancora parecchio da studiare prima di buttar giu qualcosa, ma almeno ti rendi conto che avere curiosità la prima regola per chi si mette a programmare ... Alimentala ;)