Wie Tastaturanschläge in Steuerelementen mit Visual C#

Eine Microsoft Visual Basic .NET Version dieses Artikels finden Sie unter 320583 .

IN DIESER AUFGABE

Zusammenfassung

Dieser Artikel beschreibt, wie Tastenkombinationen in Windows Forms-Steuerelemente. Mithilfe des Beispielcodes in diesem Artikel können Sie fast jedem Tastenanschlag abfangen. Sie können auch Tastenkombinationen mit STRG und ALT abfangen. Dieses Verfahren erfasst nicht die Taste Druck. Außerdem können einige Tastenanschläge von Tastaturen mit zusätzlichen Schlüsseln wie Schlüssel, die steuern, einen Webbrowser oder ein CD-ROM nicht erfasst werden.

In den meisten Fällen sind standard KeyDown, KeyUpund KeyPress -Ereignisse zu erfassen und Tastatureingaben. Nicht alle Steuerelemente jedoch diese Ereignisse für alle Tastenanschläge unter allen Umständen ausgelöst.

Betrachten Sie beispielsweise das DataGrid -Steuerelement: keine Daten an das Raster zugewiesen wurde, lösen die Pfeiltasten (links, rechts, oben und unten) das KeyUp -Ereignis. Andere Tasten wie oder 4 auslösen alle drei Ereignisse. DataGrid derzeit Daten anzeigt, werden keine Tastaturereignisse der standard für die Navigationstasten ausgelöst. Tastenanschläge wie 4 keine Ereignisse auslösen, nur KeyUpauslösen oder alle drei Ereignisse, je nach im Steuerelement Auswahl. In diesen Fällen können Sie die in diesem Artikel zum Erfassen von Tastatureingaben unabhängig vom Zustand des Steuerelements Schritte.

Die Codebeispiele in diesem Artikel sind für geschrieben DataGridist DataGrid das Steuerelement für das dabei am häufigsten angefordert wird. Sie können den gleichen Ansatz mit anderer.

Die wichtigsten Trap einrichten

Zum Abfangen von Tastenanschlägen in Windows Forms-Steuerelements leiten Sie eine neue Klasse, die auf die Klasse des Steuerelements die gewünschte, und überschreiben Sie die Methode ProcessCmdKey . In dieser überschriebenen Methode platzieren Sie den Code, um die Tastatureingaben verarbeitet, die aufgefangen werden soll. Der folgende Code ist ein Beispiel der Grundstruktur für eine Klasse:

class MyDataGrid : System.Windows.Forms.DataGrid{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
}
}


Die überschriebene Methode implementieren

Das System übergibt zwei Parameter an die Methode ProcessCmdKey : msg und KeyData. Msg -Parameter enthält die Windows-Meldung wie WM_KEYDOWN. KeyData -Parameter enthält den Tastencode für die gedrückte Taste. Auch STRG oder ALT gedrückt wurde, enthält der Parameter KeyData ModifierKey Informationen.

Mit dem msg -Parameter ist nicht erforderlich. Sie können es ignorieren. Es wird empfohlen, jedoch die Nachricht testen. In diesem Beispiel testen Sie WM_KEYDOWN, um sicherzustellen, dass dies ein Tastenanschlag-Ereignis. Sie testen auch WM_SYSKEYDOWN, so dass es zu Tastenkombinationen, die Tasten (ALT und STRG) enthalten.

Trapübersetzer bestimmte Tasten können Sie KeyCode durch Vergleich mit der Keys -Enumeration. Im folgenden Codebeispiel wird veranschaulicht, wie Tastatureingaben oben, unten, TAB, STRG + M und ALT + Z zu:

const int WM_KEYDOWN = 0x100;const int WM_SYSKEYDOWN = 0x104;

if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
{
switch(keyData)
{
case Keys.Down:
Console.WriteLine("Down Arrow Captured");
break;

case Keys.Up:
Console.WriteLine("Up Arrow Captured");
break;

case Keys.Tab:
Console.WriteLine("Tab Key Captured");
break;

case Keys.Control | Keys.M:
Console.WriteLine("<CTRL> + m Captured");
break;

case Keys.Alt | Keys.Z:
Console.WriteLine("<ALT> + z Captured");
break;
}
}


Ein Beispiel erstellen

Im folgenden Codebeispiel wird das Auffangen von Tastaturanschlägen mit dem DataGrid -Steuerelement.

  1. Erstellen Sie ein neues Windows-Steuerelementbibliothek-Projekt in Visual C#.
  2. Anzeigen der Eigenschaften für die Klasse UserControl1, und ändern Sie den Namen in MyDataGrid.
  3. Zeigen Sie den Code für die Steuerelementbibliothek und ändern Sie dann die folgende Codezeile
    public class MyDataGrid : System.Windows.Forms.UserControl
    zu:
    public class MyDataGrid : System.Windows.Forms.DataGrid
    Note In Visual Studio 2005 or Visual Studio 2008, change the following line of code:
    public partial class MyDataGrid : System.Windows.Forms.DataGrid 
  4. Fügen Sie die folgende Methode der MyDataGrid -Klasse:
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData){
    const int WM_KEYDOWN = 0x100;
    const int WM_SYSKEYDOWN = 0x104;

    if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
    {
    switch(keyData)
    {
    case Keys.Down:
    this.Parent.Text="Down Arrow Captured";
    break;

    case Keys.Up:
    this.Parent.Text="Up Arrow Captured";
    break;

    case Keys.Tab:
    this.Parent.Text="Tab Key Captured";
    break;

    case Keys.Control | Keys.M:
    this.Parent.Text="<CTRL> + M Captured";
    break;

    case Keys.Alt | Keys.Z:
    this.Parent.Text="<ALT> + Z Captured";
    break;
    }
    }

    return base.ProcessCmdKey(ref msg,keyData);
    }

  5. Erstellen Sie das Projekt.
  6. Erstellen Sie ein neues Windows-Anwendungsprojekt in Visual C#. Standardmäßig wird ein Formular mit dem Namen Form1 erstellt.
  7. Klicken Sie im Menü Extras auf Toolbox anpassen

    Hinweis Klicken Sie in Visual Studio 2005 oder Visual Studio 2008 Toolboxelemente auswählen.
  8. Klicken Sie auf die Registerkarte .NET Framework-Komponenten .
  9. Klicken Sie auf Durchsuchenund suchen Sie die soeben erstellte Steuerelement/DLL.
  10. Das MyDataGrid -Steuerelement erscheint in der Toolbox. Setzen Sie auf Form1. Hinweis: Sie können Code in den verbleibenden Schritten Beispieldaten für das anzuzeigende Raster erstellen.

  11. Der Namespace des Formulars den folgenden Code hinzufügen. Sie können den Code vor oder nach der Definition der Klasse platzieren.
    // This structure is only used in providing sample data for the grid.public struct gridData
    {
    private string make;
    private int year;

    public gridData(string n,int y)
    {
    make=n;
    year=y;
    }

    public string Make
    {
    get{return make;}
    set{make = value;}
    }

    public int Year
    {
    get{return year;}
    set{year=value;}
    }
    }

  12. Die Formularklasse unmittelbar nach dem Abschnitt "Windows Formulardesigner generierter Code" Fügen Sie folgenden Code hinzu:
    protected gridData[] dataArray=new gridData[5];
  13. Das Load -Ereignis von Form1 den folgenden Code hinzufügen:
    // Create some sample data.dataArray[0]=new gridData("ford",1999);
    dataArray[1]=new gridData("chevrolet",1999);
    dataArray[2]=new gridData("plymouth",1988);
    dataArray[3]=new gridData("honda",1999);
    dataArray[4]=new gridData("fiat",1987);

    // Assign the data to the grid.
    myDataGrid1.DataSource=dataArray;

  14. Führen Sie das Beispiel, und führen Sie verschiedene Tastenkombinationen, die eingeschlossene (oben, unten, TAB, STRG + M und ALT + Z) werden. Die Beschriftung des Formulars wird aktualisiert die Tastenkombination gedrückt wurde.
Eigenschaften

Artikelnummer: 320584 – Letzte Überarbeitung: 16.01.2017 – Revision: 1

Feedback