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

    [VB6] Problema Flex Grid

    Ho una tabella con dei dati, costituita da più righe e tre colonne. I dati nella prima colonna non sono ordinati in base al nome. Io vorrei realizzare un meccanismo che alla pressione di una lettera mi selezioni la riga che inizia con quella lettera. Il codice che ho realizzato funziona e lo posto:

    codice:
    Private Sub Lista_KeyPress(KeyAscii As Integer)
      Dim i As Integer
      If (KeyAscii = 13) Then
        Call ShowUser
      ElseIf (KeyAscii = 92) And (Lista.Row <> 1) Then
        Clipboard.Clear
        Clipboard.SetText Lista.TextMatrix(Lista.Row, 0)
      Else
        If (Chr(KeyAscii) <> C) Then
          C = Chr(KeyAscii)
    Inizio:
          For i = 1 To Lista.Rows - 1
            If (Left(Lista.TextMatrix(i, 0), 1) = C) Then
              Lista.Row = i
              Pos = i
              Exit Sub
            End If
          Next i
        Else
          For i = Pos + 1 To Lista.Rows - 1
            If (Left(Lista.TextMatrix(i, 0), 1) = C) Then
              Lista.Row = i
              Pos = i
              Exit Sub
            End If
            If (i = Lista.Rows - 1) Then
              GoTo Inizio
            End If
          Next i
        End If
      End If
    End Sub
    C e Pos sono due variabili globali.

    I miei problemi sono i seguenti:

    1) l'attributo "Row" mi permette di selezionare solo la cella, mentre a me interesserebbe selezionare tutta la riga.

    2) Questa lista contiene molte righe, quindi è inevitabile una scrollbar laterale, il problema sorge quando seleziono una riga che si trova al di sotto di quelle visibili e non riesco a spostare automaticamente la scrollbar in modo tale che essa possa essere visibile. Come posso fare?


    Spero di essere stato chiaro nel presentarvi il problema e spero tanto possiate aiutarmi.

    Thx

    Max
    La luce è più veloce del suono,ecco xchè alcune persone sembrano brillanti fino a quando non parlano


  2. #2
    Utente di HTML.it L'avatar di Mabi
    Registrato dal
    May 2002
    Messaggi
    1,245
    Per il primo problema prova così:
    codice:
    Private Sub FG_KeyPress(KeyAscii As Integer)
    Dim Cont1 As Integer
    Dim MemRow As Integer
    Dim Lettera As String
    Dim Selezionato As Boolean
    
    Lettera = (Chr(KeyAscii))
    If FG.Col = 0 And FG.Row > 0 Then
      FG.Col = 0
      MemRow = FG.Row
      For Cont1 = FG.Row To FG.Rows - 1
        FG.Row = Cont1
        If Left(FG.Text, 1) = Lettera Then
          FG.RowSel = Cont1
          FG.ColSel = FG.Cols - 1
          Selezionato = True
          Exit For
        End If
      Next Cont1
      If Selezionato = False Then
        For Cont1 = 1 To MemRow - 1
          FG.Row = Cont1
          If Left(FG.Text, 1) = Lettera Then
            FG.RowSel = Cont1
            FG.ColSel = FG.Cols - 1
            Exit For
          End If
        Next Cont1
      End If
    End If
    End Sub
    Ciao.

  3. #3
    Ti ringrazio Mabi, grazie al tuo codice sono riuscito a risolvere il mio "primo" problema, purtroppo rimane irrisolto ancora il secondo.


    Nessuno sa aiutarmi, sicuramente deve essere una cosa fattibile (non so di che grado di difficoltà), xchè l'ho vista in molti programmi, nonchè in windows.

    Grazie per l'aiuto

    Max
    La luce è più veloce del suono,ecco xchè alcune persone sembrano brillanti fino a quando non parlano


  4. #4
    Ragazzi scusate se faccio risalire il post, ma è una questione importante, possibile che non ci sia una soluzione???

    Grazie

    Max
    La luce è più veloce del suono,ecco xchè alcune persone sembrano brillanti fino a quando non parlano


  5. #5
    Risolto!!!
    Il problema era più semplice di quanto potessi pensare, è stato sufficiente sfruttare la proprietà TopRow per impostare la prima riga visibile nella tabella ed utilizzarla all'interno del ciclo.

    Se qualcuno ha avuto il mio stesso problema e necessita delle modifiche al codice da me postato in precedenza, me lo faccia sapere e posto le modifiche.

    Vi ringrazio comunque.

    Max
    La luce è più veloce del suono,ecco xchè alcune persone sembrano brillanti fino a quando non parlano


  6. #6

    io io

    a me interessano quelle modifiche grazie!
    BillyCorgan.it
    http://www.billycorgan.it

  7. #7
    Ecco le modifiche, buon lavoro.

    codice:
    Private Sub Lista_KeyPress(KeyAscii As Integer)
      Dim i As Integer
      If (KeyAscii = 13) Then
        Call ShowUser
      ElseIf (KeyAscii = 92) And (Lista.Row <> 1) Then
        Clipboard.Clear
        Clipboard.SetText Lista.TextMatrix(Lista.Row, 0)
      Else
        If (Chr(KeyAscii) <> C) Then
          C = Chr(KeyAscii)
    Inizio:
          For i = 1 To Lista.Rows - 1
            If (Left(Lista.TextMatrix(i, 0), 1) = C) Then
              Lista.Row = i
              Lista.ColSel = 2
              Pos = i
              If (i - 10 < 1) Then
                Lista.TopRow = 1
              Else
                Lista.TopRow = i - 10
              End If
              Exit Sub
            End If
          Next i
        Else
          For i = Pos + 1 To Lista.Rows - 1
            If (Left(Lista.TextMatrix(i, 0), 1) = C) Then
              Lista.Row = i
              Lista.ColSel = 2
              Pos = i
              If (i - 10 < 1) Then
                Lista.TopRow = 1
              Else
                Lista.TopRow = i - 10
              End If
              Exit Sub
            End If
            If (i = Lista.Rows - 1) Then
              GoTo Inizio
            End If
         Next i
       End If
     End If
    End Sub
    Ciao
    La luce è più veloce del suono,ecco xchè alcune persone sembrano brillanti fino a quando non parlano


  8. #8

    grazie

    Grazie!!
    BillyCorgan.it
    http://www.billycorgan.it

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.