2010-11-19 5 views
1

J'ai une situation étrange lorsque les raccourcis clavier d'un bouton avec datagridview sont utilisés. Voici l'explication:DataGridView - Touches de raccourci Vs MouseClick pour Cell Focus

J'ai un winform dans lequel il y a un DataGridview et un bouton Save. Le bouton Enregistrer possède un raccourci clavier Alt + S. J'entre des lignes dans la grille et je valide toutes les cellules sur le bouton Enregistrer le clic et si la valeur de la cellule est invalide, je vais mettre le focus sur cette cellule. Voici le code utilisé pour y parvenir:

for (var index = 0; index < GridView.Rows.Count; index++) 
    { 
    var itemRow = GridView.Rows[index]; 

    if (itemRow.Cells[SomeColumn.Name].Value.ToString() == string.Empty) 
    { 
     GridView.CurrentCell = itemRow.Cells[SomeColumn.Name]; 
     GridView.Focus(); 
    } 
    } 

code ci-dessus fonctionne très bien et met l'accent dans la cellule particulière avec le curseur lorsque je clique sur le bouton Enregistrer. Mais, lorsque j'utilise une touche de raccourci, la mise au point n'est pas du tout définie sur la cellule. Je ne sais pas pourquoi il se comporte comme ça.

Par curiosité, j'ai testé un événement de datagridview. L'événement CellLeave de datagridview est déclenché lorsque je clique sur le bouton Enregistrer, mais lorsque j'utilise un raccourci pour enregistrer le bouton, il n'est pas déclenché.

Pourquoi se comporte-t-il ainsi? des entrées? Comment puis-je définir la mise au point lorsque j'utilise des raccourcis?

Mise à jour: J'ai fait un truc pour le faire correctement. J'ai ajouté le code SaveButton.Focus() dans l'événement de clic de bouton du bouton de sauvegarde en première ligne. Ceci est redondant mais oblige la grille à perdre le focus lorsque l'utilisateur utilise la touche de raccourci pour accéder à ce bouton. Cette solution fonctionne bien, mais pas sûr de ce qui pourrait être la raison de la situation ci-dessus. Toujours à la recherche d'une réponse :(

+0

peut sembler une question stupide, mais il est juste pour être sûr: L'événement de clic de bouton est-il déclenché lorsque vous utilisez le raccourci? – Jla

+0

@DrDro: Oui, il se déclenche :) – JPReddy

+0

Basé sur le test d'événement CellLeave, je suppose que la grille ne perd même pas le focus, ce qui fait que la mise au point de cellule peut ne pas fonctionne correctement, c'est juste une supposition, mais il n'y a pas r eason pour pourquoi la focalisation des cellules ne fonctionne pas même dans ce cas. – JPReddy

Répondre

1

Vérifiez la combinaison de touches sur l'événement DataGridVeiw keyDown alors si la clé est Alt + S puis définir le focus sur DatagridVeiw

Mise à jour:

private void dataGridView1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyData == (Keys.Alt | Keys.S)) 
    { 
     //put your code to validate i.e. what u are trying in button click event 
    } 
} 
+0

@Javed Akram: Je suis désolé, je ne pouvais pas comprendre votre réponse. Pourquoi mettre à nouveau le focus sur Grid lorsque le focus est déjà sur la grille. Je veux que la cellule soit identifiée comme étant invalide dans le code d'événement du bouton de sauvegarde. – JPReddy

+0

@Javed Akram: l'événement de clavier ne se déclenche jamais lorsque vous appuyez sur la touche alt, essayez la solution que vous avez donnée et faites-moi savoir si cela fonctionne. – JPReddy

+0

@Javed Akram: Avez-vous essayé quand le focus est dans une cellule? Je ne pouvais pas déclencher cet événement lorsque le focus se trouvait dans une cellule de la vue de données. Après un peu de recherche, j'ai trouvé que DataGridView ne déclenche pas cet événement car il n'est pas au point lorsque la cellule est en mode édition. J'ai trouvé une solution alternative pour le même. – JPReddy

Questions connexes