Discussione chiusa
Visualizzazione dei risultati da 1 a 8 su 8

VB6 MSFlexGrid

  1. #1
    lunatico82 non è in linea Novello
    Salve a tutti ho un problema con MSFlexgrid.
    Ho creato un piccolo programmino per gestire i lavori di un autofficina. gestire il tutto con semplicita e in base alle mie conoscenze ho usato un database access e delle MSflexGrid
    Nel programma si immette il nominativo del cliente o parte del nome e poi apro un nuovo form con dentro una MSFLEXgrid con tutti i nomi che iniziano per le lettere inserite nella ricerca, fin qui tutto ok, poi si clikka 2 volte sulla riga del cliente interessato e si chiude il form dove si è appena fatto il doppio clik e se ne apre un'altro nel quale si visualizza una nuova msflexgrid con all'interno tutte le macchine possedute da quel cliente, ancora doppio clik su una delle auto, il form appena clikkato si chiude e se ne apre uno nuovo con un'altra MsFlexgrid contenente tutti i lavori eseguiti su quella macchina, ancora doppio clik su un determinato lavoro di quella macchina e si apre un nuovo form con il dettaglio dei lavori eseguiti.
    Ho usato il doppio clik per passare da un form all'altro, mentre se in qualsiasi msflexgrid si clikka solo una volta appare un commadbutton x poter eseguire delle modifiche alla riga selezionata come ad esempio la correzione di una targa che è stata inserita sbagliata.
    Questo x fare il quadro a grandi linee del programma. il mio problema è questo, appena fatta la ricerca del cliente si apre la flex con i clienti e tutto è ok, quando per clikko 2 volte sul cliente per passare al form contenente la flex con le auto di quel cliente, la prima riga della flex mi si seleziona automaticamente. io invece non voglio che si selezioni. nella flex della lista dei clienti non mi si seleziona nulla, invece quando passo a quella delle auto di quel cliente, mi si seleziona automaticamente sempre le prima riga della flex e così via per le flex che compaiono a mano a mano che si va avanti. come posso fare x evitare l'auto selezione della prima riga?

  2. #2
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Hia spiegato con dovizia di particolari il tuo programma, ma solo in linea teorica e questo non aiuta a capire appieno la situazione.
    Senza codice si può solo tirare ad indovinare.

    Potrebbe essere che la griglia abbia la proprietà TabIndex = 0 quindi è il primo controllo che riceverà il focus quando sarà caricato il form.
    Controlla, e se è così ed hai altri controlli nel form imposta una altro controllo a TabIndex=0.

    Tieni presente che posso anche aver detto una pura castroniera...
    ℹ️ Leggi di più su gibra ...

  3. #3
    lunatico82 non è in linea Novello
    grazie x l'intervento ma inserendo tabindex = 0 non si risolrve il problema....

  4. #4
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Puoi provare anche ad impostare la proprietà Row uguale a zero nell'evento Load di ciascun Form, immaginando che le Flexgrid abbiano tutte una riga fissa di intestazione.

  5. #5
    mickeycc non è in linea Novello
    Anch'io ho un problema con la selezione delle righe.
    Il mio programma permette a due postazioni in rete di modificare i dati esistenti in un db access.
    Affinchè entrambi abbiano visibilità delle modifiche effettuate ricarico la flexgrid e tutto il form ogni 6 secondi.

    Ora se il db è già popolato tutto funziona correttamente;
    se il db è vuoto l'operatore attende la prima riga di dati e quando essa giunge puntandola col mouse non si ottengono i dati della riga puntata ma di quella superiore.

    La riga 0 contiene intestazioni di colonna e puntando sulla prima riga ottengo nel tooltip il nome della colonna anzicchè il dato di interesse.

    Come mai?
    il codice:
    Private Const MARGIN_SIZE = 60 ' in twip
    ' variabili per l'associazione di dati
    Private datPrimaryRS As ADODB.Recordset
    ' variabili per l'ordinamento delle colonne
    Private m_iSortCol As Integer
    Private m_iSortType As Integer
    Private Sub Form_Load()
    Dim sConnect As String
    Dim sSQL As String
    Dim dfwConn As ADODB.Connection
    Dim i As Integer
    labeltext = "Click sulla riga TS entrante per fornire la buca alla C.O."
    Label1.Caption = labeltext
     
    PercorsoPorta = App.Path
     
    ' imposta le stringhe
    sConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PercorsoPorta & "\TSlog97.mdb"
    ' sConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Password='';User ID=Admin;Data Source=C:\TSjob\TSlog97.mdb;Mode=Share Deny None;Extended Properties='';Jet OLEDB:System database='';Jet OLEDB:Registry Path='';Jet OLEDB.4.0;Database Password='';Jet OLEDB:Engine Type=4;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password='';Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"
    sSQL = "select ID,LINEA,AUTISTA,MEZZO,TARGA,DITTA,PARTITO,[ORA RICHIESTA],BUCA,[ORA RISPOSTA] from RICHIESTE where BUCA = 0 Order by ID"
    ' apre la connessione
    Set dfwConn = New Connection
    dfwConn.Open sConnect
    ' crea un gruppo di record utilizzando l'insieme specificato
    Set datPrimaryRS = New Recordset
    datPrimaryRS.CursorLocation = adUseClient
    datPrimaryRS.Open sSQL, dfwConn, adOpenForwardOnly, adLockReadOnly
    Set MSHFlexGrid1.DataSource = datPrimaryRS
    With MSHFlexGrid1
    .Redraw = False
    ' imposta la larghezza delle colonne della griglia
    .ColWidth(0) = 270 'ID
    .ColWidth(1) = 1260 'LINEA
    .ColWidth(2) = 1000 'AUTISTA
    .ColWidth(3) = 900 'MEZZO
    .ColWidth(4) = 800 'TARGA
    .ColWidth(5) = 1080 'DITTA
    .ColWidth(6) = 1000 'PARTITO
    .ColWidth(7) = 1600 'ORA RICHIESTA
    .ColWidth(8) = 600 'BUCA
    .ColWidth(9) = 1500 'ORA RISPOSTA
    ' imposta lo stile della griglia
    .AllowBigSelection = True
    .FillStyle = flexFillRepeat
    ' formatta l'intestazione in grassetto
    .Row = 0
    .Col = 0
    .RowSel = .FixedRows - 1
    .ColSel = .Cols - 1
    .CellFontBold = True
    ' formattazione in grigio a righe alterne
    For i = .FixedRows + 1 To .Rows - 1 Step 2
    .Row = i
    .Col = .FixedCols
    .ColSel = .Cols() - .FixedCols - 1
    .CellBackColor = &HC0C0C0 ' grigio chiaro
    Next i
    .AllowBigSelection = False
    .FillStyle = flexFillSingle
    .Redraw = True
    End With
    ' RIMUOVERE LE RIGHE RemoveItem
    End Sub
     
    Private Sub MSHFlexGrid1_Click()
    RIGA = MSHFlexGrid1.RowSel ' rileva quale riga è stata selezionata
    If RIGA > 0 Then
    VALORE = MSHFlexGrid1.TextMatrix(RIGA, 0) ' prende il valore della prima cella della riga selezionata (Id)
    TARGABUCA = MSHFlexGrid1.TextMatrix(RIGA, 4) ' prende il valore della prima cella della riga selezionata (TARGA)
    Unload Me
    frmBUCA.Show
    End If
    End Sub
     
    Private Sub MSHFlexGrid1_DblClick()
    '-------------------------------------------------------------------------------------------
    ' il codice dell'evento DblClick della griglia consente di ordinare le colonne
    '-------------------------------------------------------------------------------------------
    Dim i As Integer
    ' ordina solo quando si fa clic su una riga fissa
    If MSHFlexGrid1.MouseRow <= MSHFlexGrid1.FixedRows Then Exit Sub
    i = m_iSortCol ' salva la colonna esistente
    m_iSortCol = MSHFlexGrid1.Col ' imposta la nuova colonna
    ' incrementa il valore corrispondente al tipo di ordinamento
    If i <> m_iSortCol Then
    ' se si fa clic su una colonna nuova, inizia con l'ordinamento crescente
    m_iSortType = 1
    Else
    ' se si fa clic sulla stessa colonna, esegue alternativamente l'ordinamento crescente e decrescente
    m_iSortType = m_iSortType + 1
    If m_iSortType = 3 Then m_iSortType = 1
    End If
    DoColumnSort
    End Sub
     
    Sub DoColumnSort()
    '-------------------------------------------------------------------------------------------
    ' esegue l'ordinamento di tipo "scambio" per la colonna m_iSortCol
    '-------------------------------------------------------------------------------------------
    With MSHFlexGrid1
    .Redraw = False
    .Row = 1
    .RowSel = .Rows - 1
    .Col = m_iSortCol
    .Sort = m_iSortType
    .FillStyle = flexFillRepeat
    .Col = 0
    .Row = .FixedRows
    .RowSel = .Rows - 1
    .ColSel = .Cols - 1
    .CellBackColor = &HFFFFFF
    ' formattazione in grigio a righe alterne
    Dim iLoop As Integer
    For iLoop = .FixedRows + 1 To .Rows - 1 Step 2
    .Row = iLoop
    .Col = .FixedCols
    .ColSel = .Cols() - .FixedCols - 1
    .CellBackColor = &HC0C0C0 ' grigio chiaro
    Next iLoop
    .FillStyle = flexFillSingle
     
    .Redraw = True
    End With
    End Sub
     
    Private Sub Form_Resize()
    Dim sngButtonTop As Single
    Dim sngScaleWidth As Single
    Dim sngScaleHeight As Single
     
    Dim sngLabeltext As Single
    On Error GoTo Form_Resize_Error
    With Me
    sngScaleWidth = .ScaleWidth
    sngScaleHeight = .ScaleHeight
    ' sposta il pulsante di chiusura nell'angolo in basso a destra
    With .cmdClose
    sngButtonTop = sngScaleHeight - (.Height + MARGIN_SIZE)
    .Move sngScaleWidth - (.Width + MARGIN_SIZE), sngButtonTop
    End With
    With .Label1
    sngLabeltext = sngScaleHeight - (.Height + (2 * MARGIN_SIZE))
    .Move sngScaleWidth - (.Width + MARGIN_SIZE), sngLabeltext
    End With
    .MSHFlexGrid1.Move MARGIN_SIZE, _
    MARGIN_SIZE, _
    sngScaleWidth - (2 * MARGIN_SIZE), _
    sngLabeltext - (5 * MARGIN_SIZE)
    End With
    Exit Sub
    Form_Resize_Error:
    ' impedisce la generazione di errori nel caso di valori negativi
    Resume Next
    End Sub
    Private Sub cmdClose_Click()
    Unload Me
    End
    End Sub
     
    Private Sub tmrPORTA_Timer()
    ' ogni 6000 millisecondi ossia 6 secondi aggiorna la maschera
    On Error GoTo UpdateErr
    Form_Load
    frmPorta.Refresh
    frmPorta.MSHFlexGrid1.Refresh
     
    Exit Sub
    UpdateErr:
    MsgBox Err.Description
    End Sub
    Private Sub MSHFlexGrid1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
     
    With MSHFlexGrid1
    CONTENUTO = MSHFlexGrid1.TextMatrix(.MouseRow, .MouseCol) ' prende il valore della cella su cui si trova il cursore
    .ToolTipText = CONTENUTO
     
    End With
    End Sub
    
    Grazie

  6. #6
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Perché riesumare una discussione di 6 mesi orsono? Forse sarebbe meglio aprirne una nuova.
    E sarebbe meglio anche postare solo il codice attinente al problema lamentato, invece di costringere il lettore a scorrere righe e righe che ben poco hanno a che vedere con il problema.
    Tra l'altro ti faccio notare che la MSHFlexgrid ha la proprietà Sort che rende inutile la presenza di più della metà del codice che hai postato.
    Un'altra annotazione: non mi sembra una buona idea la riesecuzione dell'evento Form_Load (di cui non si vede una parte, tra l'altro) ad ogni scadere di Timer.

    Cerca di aiutare chi cerca di aiutarti isolando il problema.
    ℹ️ Leggi di più su Brontolo ...

  7. #7
    mickeycc non è in linea Novello
    WOW, che solerzia. Grazie.
    Non mi ero accorto che mancava parte del codice.
    L'ho postato tutto proprio perchè non capisco dove sia il problema.
    Come consigliato, procedo a nuova discussione.
    Grazie ancora.

  8. #8
    L'avatar di TheTruster
    TheTruster non è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    Chiudo.
    mickey, per la prossima volta, cerca di attenerti al regolamento.

    TheTruster
    ℹ️ Leggi di più su TheTruster ...

Discussione chiusa

Potrebbero interessarti anche ...

  1. Msflexgrid
    Da PappalardoProduction.com nel forum Visual Basic 6
    Risposte: 5
    Ultimo Post: 05-01-2008, 15:49
  2. msflexgrid
    Da dani3 nel forum Visual Basic 6
    Risposte: 6
    Ultimo Post: 25-02-2005, 13:48
  3. msflexgrid help me
    Da keanurives nel forum Visual Basic 6
    Risposte: 4
    Ultimo Post: 24-02-2005, 21:25
  4. MSFlexGrid
    Da deca80 nel forum Visual Basic 6
    Risposte: 50
    Ultimo Post: 07-12-2004, 16:57
  5. msflexgrid
    Da ktjx nel forum Visual Basic 6
    Risposte: 5
    Ultimo Post: 02-03-2003, 15:24