2016-03-19 13 views
0

Ich bin neu in C# und Windows-Formulare verwenden.Warum KeyDown Event funktioniert nicht mit DataGridview C#?

Ich war auf der Suche nach einem Ereignis mit datagridview zu verwenden, wenn Pfeil nach unten Taste in der Tastatur gedrückt wird und ich fand KeyDown datagridview Ereignis.

Was ich versuche zu tun:

lassen Sie uns sagen, ich habe datagridview mit 4 rows, wenn ich jetzt (in der Tastatur) Pfeil nach unten drücken ich das Highlight (Auswahl) wollen nach unten gehen und auf der gleichen Zeit, wenn eine Reihe gewählt ich das Ereignis, wenn die Zeile Schriftfarbe rot überprüfen will oder nicht, so habe ich den folgenden Code:

private void dataGridView1_KeyDown(object sender, KeyEventArgs e) 
{ 

     int RowIndex = dataGridView1.SelectedRows[0].Index; 


     if (dataGridView1.Rows[RowIndex].DefaultCellStyle.ForeColor == Color.Red) 
     { 
      MessageBox.Show("This row font is red"); 
     }    


} 

wenn ich diesen Code versuchte es das Problem nicht gut funktioniert, ist:

Sprich:

Row0 font color = black

Row1 font color = red

Row2 font color = black

Row3 font color = black

Nun wird die ausgewählte Zeile ist Row0, drücken Sie Pfeil nach unten geht es zu Row1 aber das Ereignis nicht ausgelöst wird erhalten. Jetzt ist die ausgewählte Zeile Row1 und wenn ich Pfeil nach unten drücke funktioniert das Ereignis aber zu spät, ich meine es sollte ausgelöst werden, wenn Row1 ausgewählt ist.

Wer weiß, wie kann ich es (oder andere Ideen) beheben? Ich möchte nur Zeilenschriftfarbe überprüfen, wenn ich die Pfeiltaste in der Tastatur drücke? Vielen Dank

+0

Ist Ihr dgv jemals verwenden können in Bearbeitungsmodus? Versuchen Sie auch, eine Kombination aus Tastaturinteraktivität und Nachrichtenbox zu vermeiden! Gibt es eine Beziehung zwischen RI und RowIndex? Was für einen SelectionMode hast du? – TaW

Antwort

1

Die KeyDown Ereignis ausgelöst vor die Auswahl tatsächlich geändert hat.

Schlüsselereignisse treten in der folgenden Reihenfolge:

KeyDown 

KeyPress 

KeyUp 

So eine einfache Lösung ist der Code zum KeyUp Ereignisse zu bewegen, die nach die neue Zeilenauswahl passiert ist passiert.

1

dies erreichen Sie mit folgenden Zeile Selection Ereignis zuerst die Zeilenauswahlmodus eingestellt

dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; 

dann ist hier die Auswahl geändert Ereignismechanismus

private void dataGridView1_SelectionChanged(object sender, EventArgs e) 
    { 
     if (dataGridView1.SelectedRows.Count > 0) 
     { 
      int RowIndex = dataGridView1.SelectedRows[0].Index; 
      if (dataGridView1.Rows[RowIndex].DefaultCellStyle.ForeColor == Color.Black) 
      { 
       MessageBox.Show("This row font is Black"); 
      }  
     } 
    } 
Verwandte Themen