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"
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.
Hallo samfisch3r,
e.Handled = true
herbivore
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😉
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?
Hallo samfisch3r,
Control.PreviewKeyDown + IsInputKey
herbivore
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
Hallo samfisch3r,
PreviewKeyDown musst du für alle Controls registrieren, nicht nur für das MainForm.
herbivore
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?
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
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.
Hallo samfisch3r,
foreach (Control ctrl in this.Controls)
herbivore
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);
}
}
Hallo samfisch3r,
weil Key-Events immer an das Control gehen, das gerade den Focus hat, nicht an das MainForm.
herbivore