Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
KeyDown Event
samfisch3r
myCSharp.de - Member



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

Themenstarter:

KeyDown Event

beantworten | zitieren | melden

Ist es möglich im KeyDown Event (oder ein ähnlicher) wenn ein Button aktiv ist die Enter taste so abzufangen das sie nicht den Button auslöst?
Mit jeder anderen Taste funktioniert dies auch nur die Enter-Taste läst sich nicht "Manipulieren"
private Nachricht | Beiträge des Benutzers
jaensen
myCSharp.de - Experte

Avatar #avatar-2657.png


Dabei seit:
Beiträge: 2.760
Herkunft: München

beantworten | zitieren | melden

Du kannst dir eine Member "bool bEnterDown" machen und die in deinem KeyDown event auf true setzen, in den Handlern für die Buttons musst du dann halt schauen ob diese variable gesetzt ist.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo samfisch3r,

e.Handled = true

herbivore
private Nachricht | Beiträge des Benutzers
Maddy
myCSharp.de - Member



Dabei seit:
Beiträge: 103
Herkunft: Thüringen

beantworten | zitieren | melden

Wenn mich nicht alles täuscht, gibt es in den KeyEventArgs einen Member 'Handled'. Wenn du den auf TRUE setzt wird der Tastendruck nicht weiter behandelt.

//edit:
Gleicher Gedanke
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Maddy am .
private Nachricht | Beiträge des Benutzers
samfisch3r
myCSharp.de - Member



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

Themenstarter:

beantworten | zitieren | melden

stimmt mit der e.Hanled = true sollte es eigentlich funktionieren.
Das Problem ist jedoch das wenn ich die Enter Taste drücke geht er gar nicht in die MainFormKeyDown Funktion sondern "drückt" sogleich auf den z.z. aktiven Button somit habe ich keine Möglichkeit die e.Handled aufzurufen da er gar nicht erst in die Funktion hineingeht. ich habe die anderen Tasten ausprobiert und es ist nur die Enter Taste welche nicht funktioniert.
Gibt es evt. eine andere Funktion welche aufgerufen wird wenn die Enter Taste gedrückt wird?
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo samfisch3r,

Control.PreviewKeyDown + IsInputKey

herbivore
private Nachricht | Beiträge des Benutzers
samfisch3r
myCSharp.de - Member



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

Themenstarter:

beantworten | zitieren | melden

danke für die schnelle antwort ich habe dies auch sogleich ausprobiert.
Jedoch funktioniert es immer noch genau gleich gut wie vorher


void MainFormKeyDown(object sender, KeyEventArgs e)
		{
			if(e.KeyData == Keys.Enter)
			{
				e.Handled = true;
				button2.Select();
				button2.PerformClick();
			}
		}

void MainFormPreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
		{
			if(e.KeyData == Keys.Enter)
			{
				e.IsInputKey = true;
			}
		}

wenn jetzt aber z.B. button1 aktiv ist dann wird einfach dieser gedrückt und nicht wie ich es möchte zuerst button2 selectiert und dann gedrückt
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo samfisch3r,

PreviewKeyDown musst du für alle Controls registrieren, nicht nur für das MainForm.

herbivore
private Nachricht | Beiträge des Benutzers
samfisch3r
myCSharp.de - Member



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

Themenstarter:

beantworten | zitieren | melden

hmmmm ok
und wo genau muss das erfolgen?
ich habe eine MainForm.Designer.cs in der steht
this.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.MainFormPreviewKeyDown);

muss ich das jetzt umändern und woanders hin verschieben?

und in der MainForm.cs is eben der andere Code

und der muss ja dann wohl auch geändert werden oder?
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo samfisch3r,

das kannst du so stehen lassen. Aber du brauchst zusätzlich halt noch eine Schleife über alle Controls, und in dieser Schleife den EventHandler auch noch registrieren.

herbivore
private Nachricht | Beiträge des Benutzers
samfisch3r
myCSharp.de - Member



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

Themenstarter:

beantworten | zitieren | melden

kannst du mir evt. noch ein passendes Stichwort dazu geben wie ich eine Beschreibung dazu finde da ich nicht weiss wie ich das machen kann.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo samfisch3r,

foreach (Control ctrl in this.Controls)

herbivore
private Nachricht | Beiträge des Benutzers
samfisch3r
myCSharp.de - Member



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

Themenstarter:

beantworten | zitieren | melden

WOW danke viel mals irgendwie hab ich es nun doch hingekriegt mit hilfe deines Tipps
ich weiss zwar nicht so genau wieso es nun funktioniert aber es geht

ich habe es nun so gelöst:


InitializeComponent();
reg(this);

void reg(Control control)
		{
    		foreach (Control ctrl in control.Controls)
    		{
        		ctrl.PreviewKeyDown += new PreviewKeyDownEventHandler(MainFormPreviewKeyDown);
        		reg(ctrl);
    		}
		}
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo samfisch3r,

weil Key-Events immer an das Control gehen, das gerade den Focus hat, nicht an das MainForm.

herbivore
private Nachricht | Beiträge des Benutzers
samfisch3r
myCSharp.de - Member



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

Themenstarter:

beantworten | zitieren | melden

ok Danke

hier kannst du es auch mal austesten
Attachments
private Nachricht | Beiträge des Benutzers