2010-11-19 8 views
1

Ich habe eine seltsame Situation, während Tastenkombinationen einer Taste zusammen mit Datagridview verwendet wird. Hier ist die Erklärung:DataGridView - Tastenkombinationen Vs MouseKlick für Cell Focus

Ich habe eine Winform, in der es eine Datagridview und eine Schaltfläche zum Speichern gibt. Die Schaltfläche Speichern verfügt über die Tastenkombination Alt + S. Ich gebe einige Zeilen in das Gitter ein und validiere alle Zellen auf der Schaltfläche Speichern, und wenn der Zellenwert ungültig ist, werde ich den Fokus auf diese Zelle setzen. Hier ist der Code verwendet, um das zu erreichen:

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(); 
    } 
    } 

Above Code funktioniert gut und setzt den Fokus in der jeweiligen Zelle mit Cursor, wenn ich auf die Schaltfläche Speichern klicken.

Aber wenn ich Shortcut-Taste verwende, ist Fokus auf die Zelle überhaupt nicht eingestellt. Ich bin mir nicht sicher, warum es sich so verhält.

Aus Neugier habe ich ein Ereignis der Datagridview getestet. Das CellLeave-Ereignis von datagridview wird ausgelöst, wenn ich auf die Schaltfläche zum Speichern klicke, aber wenn ich die Verknüpfung zum Speichern verwende, wird es nicht ausgelöst.

Warum verhält es sich so? irgendwelche Eingaben? Wie kann ich den Fokus festlegen, wenn ich Shortcuts verwende?

Update: Ich habe einen Trick gemacht, um es richtig zu arbeiten. Ich habe den SaveButton.Focus() - Code in das Klickereignis der Schaltfläche zum Speichern als erste Zeile eingefügt. Dies ist redundant, erzwingt jedoch, dass das Raster den Fokus verliert, wenn der Benutzer die Abkürzungstaste verwendet, um auf diese Schaltfläche zuzugreifen. Diese Lösung funktioniert gut, aber nicht sicher, was der Grund für die oben genannte Situation sein könnte. Ich suche immer noch eine Antwort. :(

+0

wie eine dumme Frage klingen, aber es ist einfach Um sicher zu sein: Wird das Tastenklickereignis ausgelöst, wenn Sie die Tastenkombination verwenden? – Jla

+0

@DrDro: Ja, es wird ausgelöst :) – JPReddy

+0

Basierend auf dem CellLeave-Ereignistest, vermute ich, dass Grid nicht einmal den Fokus verliert, daher kann der bestimmte Zellenfokus nicht richtig funktionieren, das ist nur eine Vermutung, aber es gibt keine r eason für warum Zellfokus nicht funktioniert auch in diesem Fall. – JPReddy

Antwort

1

die Tastenkombination Prüfen auf DataGridVeiw keyDown Ereignisse dann, wenn die Taste Alt + S dann der Fokus auf DatagridVeiw

ist Aktualisiert:

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: Es tut mir leid, ich konnte deine Antwort nicht verstehen. Warum sollte der Fokus wieder auf Grid gesetzt werden, wenn der Fokus bereits auf dem Raster liegt? Ich möchte den Fokus auf die Zelle, die als ungültig in der Speichern Schaltfläche klicken Ereigniscode gefunden werden. – JPReddy

+0

@Javed Akram: Das Keydown-Ereignis wird nie ausgelöst, wenn Sie die Alt-Taste drücken. Bitte versuchen Sie die Lösung, die Sie angegeben haben, und lassen Sie mich wissen, ob sie funktioniert. – JPReddy

+0

@Javed Akram: Hast du es versucht, wenn der Fokus in einer Zelle ist? Ich konnte dieses Ereignis nicht auslösen, wenn der Fokus in einer Zelle in der Datagridview ist. Nach ein wenig Suche habe ich festgestellt, dass DataGridView dieses Ereignis nicht auslöst, da es nicht im Fokus ist, wenn sich die Zelle im Bearbeitungsmodus befindet. Ich habe eine alternative Lösung für das gleiche gefunden. – JPReddy