Laden...

KeyDown Event

Erstellt von samfisch3r vor 16 Jahren Letzter Beitrag vor 16 Jahren 4.909 Views
S
samfisch3r Themenstarter:in
26 Beiträge seit 2007
vor 16 Jahren
KeyDown Event

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"

2.760 Beiträge seit 2006
vor 16 Jahren

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.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo samfisch3r,

e.Handled = true

herbivore

M
103 Beiträge seit 2006
vor 16 Jahren

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😉

S
samfisch3r Themenstarter:in
26 Beiträge seit 2007
vor 16 Jahren

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?

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo samfisch3r,

Control.PreviewKeyDown + IsInputKey

herbivore

S
samfisch3r Themenstarter:in
26 Beiträge seit 2007
vor 16 Jahren

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

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo samfisch3r,

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

herbivore

S
samfisch3r Themenstarter:in
26 Beiträge seit 2007
vor 16 Jahren

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?

49.485 Beiträge seit 2005
vor 16 Jahren

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

S
samfisch3r Themenstarter:in
26 Beiträge seit 2007
vor 16 Jahren

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.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo samfisch3r,

foreach (Control ctrl in this.Controls)

herbivore

S
samfisch3r Themenstarter:in
26 Beiträge seit 2007
vor 16 Jahren

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);
    		}
		}

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo samfisch3r,

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

herbivore

S
samfisch3r Themenstarter:in
26 Beiträge seit 2007
vor 16 Jahren

ok Danke

hier kannst du es auch mal austesten 😜