Jedes Mal, wenn ein Zelle befindet sich im Bearbeitungsmodus, das gehostete Steuerelement empfängt das KeyDown
Ereignis anstelle des übergeordneten Elements DataGridView
, das es enthält. Deshalb funktioniert Ihr Tastaturkürzel immer dann, wenn sich eine Zelle nicht im Bearbeitungsmodus befindet (selbst wenn sie ausgewählt ist), weil Ihr Steuerelement DataGridView
das Ereignis KeyDown
empfängt. Wenn Sie sich jedoch in Bearbeitungsmodus befinden, empfängt das Bearbeitungssteuerelement, das von der Zelle enthalten wird, das Ereignis, und nichts geschieht, da es Ihre benutzerdefinierte Handler-Routine nicht verknüpft hat.
Ich habe viel zu viel Zeit damit verbracht, den Standard DataGridView
Steuer zwicken, wie ich es will behandeln bearbeiten verpflichtet, und ich fand, dass der einfachste Weg, um dieses Phänomen zu bekommen, ist durch die bestehende DataGridView
Steuer Subklassen und seine zwingenden ProcessCmdKey
function. Welcher benutzerdefinierte Code hier eingegeben wird, wird ausgeführt, wenn eine Taste oben auf DataGridView
gedrückt wird, unabhängig davon, ob sie sich im Bearbeitungsmodus befindet oder nicht.
Zum Beispiel, können Sie so etwas tun könnten:
class MyDataGridView : System.Windows.Forms.DataGridView
{
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
MessageBox.Show("Key Press Detected");
if ((keyData == (Keys.Alt | Keys.S)))
{
//Save data
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
Siehe auch im Zusammenhang, wenn auch schon etwas älter, Artikel: How to trap keystrokes in controls by using Visual C#
Es ist nicht gefeuert, oder der Code wird nicht korrekt ausgeführt? Können Sie mehr über das, was Sie tun, erklären? – Rox
Teile von einigen Antworten auf diesen Link sind ein bisschen verwandt- http://StackOverflow.com/Questions/686309/Datagridview-change-Edit-Control-Size-while-Editing/23703744 – barlop