Laden...

Wie kann ich in C# ein Key-Down-Event erstellen, so wie es in VB ging?

Erstellt von Suspekta vor 3 Jahren Letzter Beitrag vor 3 Jahren 556 Views
S
Suspekta Themenstarter:in
19 Beiträge seit 2020
vor 3 Jahren
Wie kann ich in C# ein Key-Down-Event erstellen, so wie es in VB ging?

Hallo,

ich habe immer in VB programmiert und möchte jetzt auch c# lernen.
Ich habe in einem VB Projekt für alle Controls einen Key-Down-Event erstellt
Wie kann ich das in c# machen?

VB:


Dim c As Control

For Each c In me.Controls
    AddHandler c.KeyDown, AddressOf StandartKeyDownEvent
    AddHandler c.TextChanged, AddressOf StandartKeyTextchangedEvent
Next

Vorab schonmal vielen Dank für die Hilfe
LG
Mirco

4.942 Beiträge seit 2008
vor 3 Jahren

Hallo und willkommen,

das geht mit dem += Operator:


c.KeyDown += StandartKeyDownEvent; // Standard!!!

s. Vorgehensweise: Abonnieren von Ereignissen und Kündigen von Ereignisabonnements, Vorgehensweise: Auslösen und Verarbeiten von Ereignissen sowie generell auch [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse).

PS: Üblicherweise benennt man die Ereignismethode nicht mit "Event", also z.B. einfach Control_KeyDown.

S
Suspekta Themenstarter:in
19 Beiträge seit 2020
vor 3 Jahren

Hallo,
danke für deine Antwort. Jetzt stellt sich folgendes Problem:


  private void Login_Load(object sender, EventArgs e)
        {
            foreach (var c in this.Controls)
            {
                c.KeyDown += Control_KeyDown;
            }
       }

   private void Control_KeyDown()
        {

        }

Das c.keyDown wird nicht erkannt bzw. "object enthält keine Definition für KeyDown"
Gibt es hierfür eine Lösung?
Danke

16.842 Beiträge seit 2008
vor 3 Jahren

Das wichtigste bei der Entwicklung ist: Hilfe zur Selbsthilfe.
Dazu gehört zum Beispiel, dass man sich die Grundlagen von C# beibringt (das kann das Forum leider nicht tun, sorry!) und, dass man lernt die Dokumentation zu verwenden - und natürlich auf Errors reagieren zu können.

Wir zum Beispiel haben überhaupt keine Ahnung, welcher Typ hier c ist - können Dir also natürlich auch nichts dazu sagen, weil wir einfach keine Glaskugel haben.
Wir können zwar am Namen raten, dass es ein Forms Control sein muss und daher entsprechend auch ein KeyDown haben sollte; aber am Ende bleibt nichts als raten.
Ich vermute, dass bei Dir this.Controls eine Liste von object ist und nicht von Control - und dann kann natürlich nichts gefunden werden.

Du musst Dir schon etwas mehr Mühe geben a) das Zeug selbst zu verstehen oder b) potentiellen Helfern mehr Informationen zu geben.

Edit:

Ich habe Deinen Code getestet und ja, es ist wie ich es vermutet habe: c ist hier vom Typ object - und nicht von Control. Daher kann natürlich auch nichts gefunden werden und es kommt zum Fehler.
Das ist leider, weil Du hier einfach C# falsch anwendest ==> Grundlagen lernen 😃

Dein Code funktioniert hier nur, wenn Du den konkreten Typ bekannt machst

foreach (Control c in this.Controls)
{
    c.KeyDown += Control_KeyDown;
}

Aber 100% funktioniert der Code auch nicht, weil Du die Methode Control_KeyDown darüber hinaus falsch implementiert hast, weil die notwendigen Parameter fehlen.

Welche Du benötigst siehst Du in der Dokumentation.

S
Suspekta Themenstarter:in
19 Beiträge seit 2020
vor 3 Jahren

Hallo,

nochmal danke für deine Antwort. Ich bin leider etwas VB geschädigt ^^

nach dem Ändern von "var c" in "Control c" und den anpassen von Control_KeyDown
hat es dann auch funktioniert....


 public Form1()
        {
            InitializeComponent();

            foreach (Control c in this.Controls)
            {
                c.KeyDown += Control_KeyDown;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void Control_KeyDown(object sender, KeyEventArgs e)
        {
            MessageBox.Show("Taste gedrückt");
         
        }

Vielen lieben Dank und ich gelobe Besserung in Umgang mit C# ^^