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
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
.
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
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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# ^^