+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité de passage
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : février 2012
    Messages : 4
    Points : 1
    Points
    1

    Par défaut [OpenEdge Architect] Problème de focus sur UltraGrid

    Bonjour,

    Je débute en technologies Progress (quelques jours...) et je suis déjà confronté à un problème que je n'aurais jamais cru pouvoir affronter après avoir trouvé ça simplissime dans d'autres technologies.

    Voilà mon problème :
    j'ai une UltraGrid et je dois changer de focus (cellule sélectionnée) lorsque j'appuie sur entrée.
    Je pense avoir trouvé la plupart des choses qui me sont utiles... sauf comment affecter le focus physiquement à la cellule. Et c'est assez problématique.
    Quelqu'un dans sa toute bonté aurait-il une piste à me donner?
    Merci.

    Voici ce qui est déjà fait :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    /*------------------------------------------------------------------------------
    			Purpose:  Gestion de la tabulation avec la touche entrée.																	  
    			Notes:  																	  
    	------------------------------------------------------------------------------*/
    	@VisualDesigner.
    	METHOD PRIVATE VOID grd_Customer_KeyDown( INPUT sender AS System.Object, INPUT e AS System.Windows.Forms.KeyEventArgs ):
    		
    		/* Déclarations des variables */
    		DEFINE VARIABLE in_Row AS INTEGER NO-UNDO. /*Lignes*/
    		DEFINE VARIABLE in_Col AS INTEGER NO-UNDO. /*Colonnes*/
    	    /*DEFINE VARIABLE ch_Editeur AS CHARACTER NO-UNDO.*/ /* editeur pour mettre en gras le nom de la colonne où se trouve l'index.....*/
    	    DEFINE VARIABLE in_KC AS INTEGER NO-UNDO. /* KeyCode en numérique 0-9*/
    	    
    	    
    	    /* affichage du keycode de la touche pressée, à effacer après le tests.*/
    	    ASSIGN in_KC = e:KeyValue.
    	    MESSAGE "KeyCode de la touche pressée : " in_KC SKIP 
    	               "TabIndex      = " grd_Customer:TabIndex SKIP 
    	               "Index colonne = " grd_Customer:ActiveCell:Column:Index SKIP
    	               "Index ligne   = " grd_Customer:ActiveRow:Index VIEW-AS ALERT-BOX.
    	               
    	               
    	               /* C'est pas le tabIndex qui bouge*/
    	    
    	    /* KeyValue étant en lecture seule, on ne peut pas lui ré-affecter la valeur soouhaitée :
    	        ENTER = 13 / RIGHT = 39 / TAB = 9 
    	        ------> ne pas utiliser 39 dans ce cas. Si la cellule est active on n'en sort pas*/
    	    /* IF in_KC = 13 THEN e:KeyValue = 39. ----> Impossible */
    	    
    	  
            
            /*ASSIGN in_ColIndex = grd_Customer:c*/
            DEFINE VARIABLE in_indexCol AS INTEGER NO-UNDO.
            ASSIGN in_indexCol = grd_Customer:ActiveCell:Column:Index.
            ASSIGN in_indexCol = in_indexCol + 1.
     
    
    	    IF in_KC = 13 THEN
    	    
    	    
    
    
    		
    		
    		RETURN.
    
    	END METHOD.
    Merci de votre aide !
    Fichiers attachés Fichiers attachés

  2. #2
    Invité de passage
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : février 2012
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Bon voilà ce que ça donne, au cas où quelqu'un en aurait besoin :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    /*------------------------------------------------------------------------------
    			Purpose:  Dans l'InitializeLayout, penser à activer une Cellule.
    			Si aucune cellule n'est activée, alors la fonction de tabulation avec la touche Entrée ne peut pas marcher.																	  
    			Notes:  																	  
    	------------------------------------------------------------------------------*/
    	@VisualDesigner.
    	METHOD PRIVATE VOID grd_Customer_InitializeLayout( INPUT sender AS System.Object, INPUT e AS Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs ):
    		/* Déclarations des variables */
            DEFINE VARIABLE in_Row AS INTEGER NO-UNDO. /*Ligne en cours*/
            DEFINE VARIABLE in_indexCol AS INTEGER NO-UNDO. /* Colonne en cours */
            DEFINE VARIABLE myCell AS Infragistics.Win.UltraWinGrid.UltraGridCell NO-UNDO. /* instance d'un objet Cellule pour manipulation dans la grid*/
            DEFINE VARIABLE myRow AS Infragistics.Win.UltraWinGrid.UltraGridRow NO-UNDO. /* Pareil pour la */
            
            /* INITIALISATIONS */
            ASSIGN in_Row = 0.
            ASSIGN in_indexCol = 0.
            ASSIGN myRow = THIS-OBJECT:grd_Customer:Rows[in_Row].
            ASSIGN myCell = myRow:Cells[in_indexCol].
            THIS-OBJECT:grd_Customer:ActiveCell = myCell.   
            
            
            
    		RETURN.
    
    	END METHOD.
    
    	/*------------------------------------------------------------------------------
    			Purpose:  Gestion de la tabulation avec la touche entrée.																	  
    			Notes:  																	  
    	------------------------------------------------------------------------------*/
    	@VisualDesigner.
    	METHOD PRIVATE VOID grd_Customer_KeyDown( INPUT sender AS System.Object, INPUT e AS System.Windows.Forms.KeyEventArgs ):
    		
    		/* Déclarations des variables */
    		DEFINE VARIABLE in_Row AS INTEGER NO-UNDO. /*Ligne en cours*/
    	    /*DEFINE VARIABLE ch_Editeur AS CHARACTER NO-UNDO.*/ /* editeur pour mettre en gras le nom de la colonne où se trouve l'index.....*/
    	    DEFINE VARIABLE in_KC AS INTEGER NO-UNDO. /* KeyCode en numérique 0-9*/
    	    DEFINE VARIABLE in_nbCols AS INTEGER NO-UNDO. /* Longueur de la grid dans le sens Colonnes, pour calculer le moment où il faut changer de ligne*/
    	    DEFINE VARIABLE in_indexCol AS INTEGER NO-UNDO. /* Colonne en cours */
    	    DEFINE VARIABLE myCell AS Infragistics.Win.UltraWinGrid.UltraGridCell NO-UNDO. /* instance d'un objet Cellule pour manipulation dans la grid*/
            DEFINE VARIABLE myRow AS Infragistics.Win.UltraWinGrid.UltraGridRow NO-UNDO. /* Pareil pour la ligne*/
    	    
    	    /* INITIALISATIONS */
    	    ASSIGN in_nbCols = THIS-OBJECT:grd_Customer:ActiveColScrollRegion:Height.
    	    ASSIGN in_KC = e:KeyValue.
            ASSIGN in_indexCol = grd_Customer:ActiveCell:Column:Index.
            ASSIGN in_indexCol = in_indexCol + 1.
            ASSIGN in_Row = grd_Customer:ActiveCell:Row:Index.
            /*
            IF in_KC = 13 AND THIS-OBJECT:grd_Customer:*/
            /* le KeyCode que retourne un ordinateur équipé de Windows quand on appuie sur Enter est = 13 */       
    	    IF in_KC = 13 THEN DO:   
    	       /* Si on se trouve sur la dernière colonne de la ligne active, il faut passer à la ligne suivante, sinon, plantage*/
    	       IF in_indexCol = 18 THEN DO:
    	           ASSIGN in_indexCol = 0.
                   ASSIGN in_row = in_row + 1.
                   ASSIGN myRow = THIS-OBJECT:grd_Customer:Rows[in_Row].
                   ASSIGN myCell = myRow:Cells[in_indexCol].
                   THIS-OBJECT:grd_Customer:ActiveCell = myCell.    
               END.
               /* Tant qu'on est sur la même ligne*/
    	       ELSE DO:
            	   ASSIGN myRow = THIS-OBJECT:grd_Customer:Rows[in_Row].
                   ASSIGN myCell = myRow:Cells[in_indexCol].
            	   THIS-OBJECT:grd_Customer:ActiveCell = myCell.
               END.
            END.
    	      
    	   /*
    	   Trucs à faire :
    	       
    	       1 -> positionner la cellule active dans la partie visible de la fenêtre
    	   ?   2 -> vérifier le bug de la touche TAB, comment le reproduire? -> ça le fait plus.
    	       3 -> pour le maintient de l'appli, ne pas mettre le nb de colonnes en dur, mais trouver comment on 
    	            calcule grd_Customer.Columns.Length(); ???
    	   OK  4 -> Activer la cellule (0,0) au moment du load, sinon ça peut planter.
    	            Ou alors activer la première cellule de la ligne active au moment où on reçoit un KeyCode 13.
    	       5 -> Fonction de validation de la cellule saisie en fonction du retour de la BDD
    	   */
    	    
    
    
    		
    		
    		RETURN.
    
    	END METHOD.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •