begin process at 2012 02 15 22:19:31
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Visual Basic & VB.NET

 > 

Archives Visual Basic

 > 

J'AI BESOIN D'AIDE !!!! :)

 > 

MSFlexgrid Problemes avec Ligne 0 et touches flechees


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

MSFlexgrid Problemes avec Ligne 0 et touches flechees

samedi 5 novembre 2005 à 14:11:20 | MSFlexgrid Problemes avec Ligne 0 et touches flechees

madustbin

Salut.

J'ai reussi a faire ce que je desirais, mais j'aimerais savoir s'il y a un moyen plus propre d'y parvenir. Si c'est le cas et si vous avez un exemple, je suis preneur. Car pour réussir, j'ai du utiliser 2 Flexgrid (1 pour l'entete, l'autre pour les lignes)

But :
Cliquer sur la colonne Entete (action=Tri  dans l'exemple)
Redimensionnement de la colonne par l'utilisateur
Clique les les lignes
Utiliser les touches Flechees.
Selectionner une Ligne de l'exterieur (par la ListBox par exemple)


1 Form
1 MSFlexGrid (20cm de large 3cm de Haut)
1 MSFlexGrid (20cm de large 15cm de Haut) juste dessous la premiere
1 ListBox  de 15cm de Haut a droite de la seconde Flexgrid

et vous copier le source


Merci d'avance.


Option Explicit

' SEC= Sub En Cours      booleen pour empecher les appels recursifs inopines
Dim SEC_Chargement As Boolean
Dim SEC_AfficherLigneSelected As Boolean
Dim SEC_Trier As Boolean
Dim SEC_SelChange As Boolean

Dim LigneSelected As Integer

Dim stTriNew As String
Dim stTriOld As String

'*===============================================================================================
'*           FORM -->   LOAD
'*===============================================================================================
Private Sub Form_Load()
    Call Charger
    List1.ListIndex = 0
End Sub

'*===============================================================================================
'*  Ajustement de la taille d'une colonne modifiee manuellement
'*************************************************************************************
Private Sub MSFlexGrid1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    Dim i As Integer
    Dim Modifie As Boolean
   
    Modifie = False
    With MSFlexGrid2
        For i = 0 To .Cols - 1
            If .ColWidth(i) <> MSFlexGrid1.ColWidth(i) Then
                .ColWidth(i) = MSFlexGrid1.ColWidth(i)
                Modifie = True
            End If
        Next
    End With
    If Modifie Then MSFlexGrid2.SetFocus
End Sub
Private Sub MSFlexGrid2_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    Call MSFlexGrid1_MouseMove(Button, Shift, x, y)
End Sub


'*===============================================================================================
'*  Demande de Tri (clic gauche ou clic droit)
'*===============================================================================================
Private Sub MSFlexGrid1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
    Call Trier(MSFlexGrid1.MouseCol)
End Sub

'*===============================================================================================
'*  CONTROLE DU CHANGEMENT De selection (y compris les Touches Fleches)
'*===============================================================================================
Private Sub MSFlexGrid2_SelChange()
    If SEC_SelChange = False And SEC_AfficherLigneSelected = False Then 'Pour empecher la recursivite
        SEC_SelChange = True
        LigneSelected = MSFlexGrid2.RowSel
        Call AfficherLigneSelected
        List1.ListIndex = Val(MSFlexGrid2.TextMatrix(LigneSelected, 0))
'        Call List1_Click
        SEC_SelChange = False
    End If
End Sub

'*===============================================================================================
'*  TRI De la COLONNE
'*===============================================================================================
Private Sub Trier(ByVal IndexTri As Integer)
    Dim i, j As Integer
    Dim NoEnregSelected As String
    Dim SensTri As String

    On Error GoTo ErreurFocus

    SEC_Trier = True

    NoEnregSelected = MSFlexGrid2.TextMatrix(MSFlexGrid2.RowSel, 0)


    'comparaisn avec le precedent Tri (cette methode permet de comparer sur plusieurs colonnes si besoin
    ' le 1er car donne le sens, le 3 eme le no de colonne
    ' (Avec 4 Cols on aurait : D!4326 Trie en majeur sur Col4 puis 3 etc..)
    stTriNew = "?!" & Trim$(Str$(IndexTri))
    If Mid$(stTriNew, 3) = Mid$(stTriOld, 3) Then
        If Left$(stTriOld, 1) = "A" Then
            SensTri = "DESC"
            stTriNew = Replace(stTriNew, "?", "D")
        Else
            SensTri = "ASC"
            stTriNew = Replace(stTriNew, "?", "A")
        End If
    Else
        SensTri = "ASC"
        stTriNew = Replace(stTriNew, "?", "A")
    End If
    stTriOld = stTriNew

   
    MSFlexGrid2.Col = IndexTri
    If SensTri = "ASC" Then
        MSFlexGrid2.Sort = flexSortStringAscending
    Else
        MSFlexGrid2.Sort = flexSortStringDescending
    End If
   
    MSFlexGrid1.TextArray(0) = "No"
    MSFlexGrid1.TextArray(1) = "Colonnel"
    MSFlexGrid1.TextArray(IndexTri) = MSFlexGrid1.TextArray(IndexTri) & " " & SensTri

    'Restauration Ligne Selectionnee
    For i = 0 To MSFlexGrid2.Rows - 1
        If MSFlexGrid2.TextMatrix(i, 0) = NoEnregSelected Then
            LigneSelected = i
            Call AfficherLigneSelected
            If SEC_Chargement = False Then MSFlexGrid2.SetFocus
            Exit For
        End If
    Next i

    SEC_Trier = False
ErreurFocus:
End Sub

'*===============================================================================================
'*  AFFICHAGE DE LA LIGNE SELECTIONNEE
'*===============================================================================================
Private Sub AfficherLigneSelected()
    SEC_AfficherLigneSelected = True
   
    MSFlexGrid2.Col = 0
    MSFlexGrid2.Row = LigneSelected
    MSFlexGrid2.ColSel = MSFlexGrid2.Cols - 1
    MSFlexGrid2.RowSel = LigneSelected

    SEC_AfficherLigneSelected = False
End Sub

'*===============================================================================================
'*  AFFICHAGE dans MSFlexGrid2 DE LA LIGNE SELECTIONNEE dans LST
'*===============================================================================================
Private Sub List1_Click()
    Dim i As Integer
   
    If SEC_AfficherLigneSelected = False And _
       SEC_SelChange = False Then
      
        For i = 0 To MSFlexGrid2.Rows - 1
            If Val(MSFlexGrid2.TextMatrix(i, 0)) = List1.ListIndex Then
                LigneSelected = i
                Exit For
            End If
        Next i
        Call AfficherLigneSelected
    End If
End Sub



'*===============================================================================================
'*  CHARGEMENT DES MSFlexGrid1 ET MSFlexGrid2 et Listbox
'*===============================================================================================
Private Sub Charger()
    SEC_Chargement = True
   
    List1.AddItem "0"
    List1.AddItem "1"
    List1.AddItem "2"
    List1.AddItem "3"
    List1.AddItem "4"
   
    MSFlexGrid1.Rows = 1
    MSFlexGrid1.Cols = 2
    MSFlexGrid1.FixedCols = 0
    MSFlexGrid1.SelectionMode = 1
    MSFlexGrid1.AllowUserResizing = flexResizeColumns
   
    MSFlexGrid2.Rows = 5
    MSFlexGrid2.Cols = 2
    MSFlexGrid2.FixedRows = 0
    MSFlexGrid2.FixedCols = 0
    MSFlexGrid2.SelectionMode = 1
   
      
    MSFlexGrid2.ColWidth(0) = 800
    MSFlexGrid2.ColWidth(1) = 1500

    MSFlexGrid1.ColWidth(0) = 800
    MSFlexGrid1.ColWidth(1) = 1500
    MSFlexGrid1.TextArray(0) = "No    "
    MSFlexGrid1.ColAlignment(0) = flexAlignLeftCenter
    MSFlexGrid1.TextArray(1) = "Colonne1   "
    MSFlexGrid1.ColAlignment(1) = flexAlignLeftCenter

    MSFlexGrid2.TextMatrix(0, 0) = "0"
    MSFlexGrid2.TextMatrix(1, 0) = "1"
    MSFlexGrid2.TextMatrix(2, 0) = "2"
    MSFlexGrid2.TextMatrix(3, 0) = "3"
    MSFlexGrid2.TextMatrix(4, 0) = "4"

    MSFlexGrid2.TextMatrix(0, 1) = "C0"
    MSFlexGrid2.TextMatrix(1, 1) = "A1"
    MSFlexGrid2.TextMatrix(2, 1) = "E3"
    MSFlexGrid2.TextMatrix(3, 1) = "B2"
    MSFlexGrid2.TextMatrix(4, 1) = "D4"
    SEC_Chargement = False
End Sub



samedi 5 novembre 2005 à 16:46:32 | Re : MSFlexgrid Problemes avec Ligne 0 et touches flechees

VicoLaChips2

Bonjour,

Le premier truc qui me turlupine c'est "Call"
1 - Quand tu appel une fonction ou une routine (sub) tu est pas obligé de mettre call devant..

Appel récursif inopiné ?
2 - la récursivité c'est pas un bug c'est une philosophie :)

3 - Pense au pauvre programmeur informatique qui va te relire !!

Private Sub Charger()
    Dim i as integer

    SEC_Chargement = True ' --> utilise blnCharger ou alors estEnChargement...
    
    For i = 0 To 4
     List1.AddItem Cstr(i)
    Next
    With MSFlexGrid1
     .Rows = 1
     .Cols = 2
     .FixedCols = 0
     .SelectionMode = 1
     .AllowUserResizing = flexResizeColumns
     .ColWidth(0) = 800
     .ColWidth(1) = 1500
     .TextArray(0) = "No    "
     .TextArray(1) = "Colonne1   "
     .ColAlignment(0) = flexAlignLeftCenter
     .ColAlignment(1) = flexAlignLeftCenter
    End With
    With MSFlexGrid2
     .Rows = 5
     .Cols = 2
     .FixedRows = 0
     .FixedCols = 0
     .SelectionMode = 1
     .ColWidth(0) = 800
     .ColWidth(1) = 1500
     For i = 0 To 4
     .TextMatrix(0, 0) = Cstr(i)
     Next
     .TextMatrix(0, 1) = "C0"
     .TextMatrix(1, 1) = "A1"
     .TextMatrix(2, 1) = "E3"
     .TextMatrix(3, 1) = "B2"
     .TextMatrix(4, 1) = "D4"
End With

    ' ---- je vois pas trop l'interêt de cette variable dans ton code :)
    SEC_Chargement = False
End Sub

Quand au problème que tu évoques... je sais pas en fait ! passe sur C# :D

Vic.
samedi 5 novembre 2005 à 18:46:56 | Re : MSFlexgrid Problemes avec Ligne 0 et touches flechees

madustbin

les booleens servent a ne pas rentrer dans certains evenements durant les traitements.

As-tu essaye de mettre le code pour voir ce que donnais le resultat ?

Le probleme est quand lorsque tu clique sur la conne 0 d'une Flexgrid, la ligne 1 est selectionne et donc tu perds celle que tu avais.
De plus, lorsque tu utilises l'evenement, _Click, il ne tiens pas compte des touches flechees.

C'est donc un casse-tete que j'ai resolu avec cette methode.

Desole de ne pas avoir programme de la plus belle des facons, mais, l'objectif est justement de montrer que pour avoir ce resultat, j'ai du courcicuiter constemment des evenements. Donc, si on pouvait m'expliquer comment gerer cela proprement...

mais pas avec une ListView !!!





Cette discussion est classée dans : end, sec, msflexgrid1, textmatrix, msflexgrid2


Répondre à ce message

Sujets en rapport avec ce message

graphe [ par rockette ] Salut à tous, nouveau dévellopeur VB, je cherche à réaliser un graphe 2D avec en ordonnées des données que je prends dans un fichier de mon disque dur Enregistrements d'1 table ---> MSFlexgrid [ par bmichael007 ] Bonjour,voilà j'ai un pb qui dure depuis 1 semaine: c'est que je n'arrive absolument à affecter les données d'une table (à partir de la Form1) sur un Gros bug d'impression VB6, multipages catastrophique [ par Kouran666 ] bonjours à tous, voila mon prob, mon programme sert à établir des devis. Or lorsque je lance l'impression, pour une page pas de prob il me la sort nik RE: VB6 Impression peu orthodoxe (Urgent) [ par Kouran666 ] Merci à tous ceux qui ont tenter de résoudre mon problème d'impression. Malheureusement le problème continue.Réexplication du problème :Lors d'impress Couleurs et selection dans une flexgrid [ par revolter ] Bonjour, Dans mon programme je veux changer le fond de la dernière colonne en fonction de son contenu. Jusque la je n'ai aucun problème, ca fonctionn Flexgrid et données venant d'une base [ par bcmfr ] Bonjour à tousje débute en visual basic et je cherche à récupérer les données d'une base access dans une msflexgrid.J'ai donc le code suivant:'On règl remplir flexgrid sur la ligne qui suit [ par yestaface ] Bonjour,voila je suis en train de developper un logiciel de suivi de travaux,et je voulais qu' avec un MSflexgrid et une command_button remplir la fle MSFlexGrid comment faire:regarder ce code [ par kaiemma ] Bonjour, c'est encore moi avec mon même programme. il se trouve que j'ai utilisé un msflexgrid mais je n'arrive pas à enregistrer les informations de remplir msflexgrid avec 2 requetes en vb6 [ par chaima01 ] bonjour , j'ai un msflexgrid et je veux le remplir par 2 requetes. voici mon essai: [code=vb]Rs.Open "select * from projet ", Cnn, adOpenKeyset, adLo Datagrid view [ par charrynsasi ] Bonjours Quelqu'un peut il m'aider à convertir ce code utilisant msflexgrid en vb 6 vers datagridview en vb dotnet MSFlexGrid1.TextMatrix(0, 0


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,359 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales