Hi @ all,
ich bin absoluter C# Anfänger und steh vor folgendem Problem.
Ich soll für meinen Ausbilder ein Proggie schreiben, über welches man verschiedene Programme starten kann. Soweit so gut. Es funktioniert wenn ich das ganze mit der Maus steuer, doch jetzt will ich das man den Button 1 durch die Taste "X" und den Button 2 durch die Taste "Y" anwählen kann.
Würde mich über Hilfe riesig freuen. Danke
Gruß gizeK
Hallo gizeK,
Form.KeyDown und Form.KeyPreview
Oder du verwendest im Text des Buttons ein '&' vor dem gewünschten Buchstaben und kannst dann den Button mit Alt+Buchstabe aktivieren.
herbivore
thx für die schnelle antwort, aber ich komm mit der aussage nit klar.
wenn ich den button name änder mit dem & das geht nit.
un mit dem keydown bekomm ich auch nit hin.
kannst du mir mal mit standard namen en kleines bsp posten?
danke
Hallo gizeK,
Beispiele (und die wichtige Grundlagen) findest du in Galileo <openbook>: Visual C# 2005 von Andreas Kühnel. Solltest du durcharbeiten.
Weitere Informationen gibt es in der :rtfm: Doku.
herbivore
das mit dem & hat geklappt. aber man muss es in den button text rein machen un nicht in den button name.
aber danke für den hinweis
Hallo gizeK,
sorry, ich meinte natürlich Text. Ich habe es oben verbessert.
herbivore
Hallo zusammen
ich möchte das er auf tastendruck einen Button auswählt und diesen drückt dies funktioniert auch sehr gut jedoch sobald ich dies mit der Enter Taste machen möchte funktioniert dies nicht mehr also er führt button18.Select(); nicht aus sondern drückt den Button der gerade angewählt ist
void MainFormKeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if(e.KeyCode == Keys.Add)
{
button16.Select();
SendKeys.Send("{Enter}");
}
if(e.KeyCode == Keys.Enter)
{
button18.Select();
SendKeys.Send("{Enter}");
}
}
Hallo samfisch3r,
versuche es mal mit PreviewKeyDown.
herbivore
hallo herbivore
danke für die Hilfe, jedoch verstehe ich noch nicht ganz was mir das bringt.
Ich weiss das dieses PreviewKeyDown vor dem KeyDown ausgeführt wird aber was bringt mir das letztendlich?
wenn ich nun die KeyDown funktion in eine PreviewKeyDown funktion ändere dann lässt sich das ganze nicht mehr kompilieren
Hallo samfisch3r,
lässt sich das ganze nicht mehr kompilieren [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)
[Hinweis] Wie poste ich richtig? Punkt 5
herbivore
No overload for 'MainFormPreviewKeyDown' matches delegate 'System.Windows.Forms.PreviewKeyDownEventHandler' (CS0123) - "pfad"\Projects\TR\MainForm.Designer.cs:354,27
so sieht die Fehlermeldung aus wenn ich das ändere
Hallo samfisch3r,
ist doch eine klare Sache, oder? Für PreviewKeyDown musst du einen PreviewKeyDownEventHandler verwenden keinen KeyDownEventHandler.
herbivore
das hab ich wohl ganz übersehen als ich das ganze geändert habe
nun ja jetzt funktioniert zwar das compilieren aber die tastatureingabe welche mit dem KeyDown funktioniert hatte (bis auf die Enter-Taste) funktioniert nun mit PreviewKeyDown nicht mehr.
entweder geht das gar nicht oder dann verstehe ich nicht worauf du hinaus willst mit dem PreviewKeyDown
Hallo samfisch3r,
eigentlich sollte es gehen. Also das Enter solltest du in PreviewKeyDown behandeln können und alles andere wie gehabt in KeyDown.
herbivore
gibt es bei der PreviewKeyDown auch irgendwas das ich aktivieren muss?
bei KeyDown musste ich ja KeyPreview = true setzen.
ich habe die Funktion ausgetestet mit einem Test-Programm jedoch wird diese Funktion
gar nie aufgerufen egal welche Taste ich drücke es geht nur in die KeyDown Funktion aber nie in die PreviewKeyDown.
void MainFormKeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Add)
{
button16.Select();
SendKeys.Send("{Enter}");
}
}
void MainFormPreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if(e.KeyCode == Keys.Enter)
{
button18.Select();
SendKeys.Send("{Enter}");
}
}
Hallo samfisch3r,
die Alternative zu KeyPreview = true ist den EventHandler für alle Controls in deinem Form zu registrieren. Wenn also KeyPreview für PreviewKeyDown nicht wirkt, musst du genau das tun.
herbivore
der Event ist ja schon registriert (geht ja alles automatisch)
ich denke eher das man die Enter Taste abfangen muss bevor sie den zuletzt ausgewählen Button in der Form drückt. Ich habe jedoch schon so viele Dinge probiert wie ich diese abfangen kann (z.B. mit e.Handled=true; oder e.SuppressKeyPress = true😉 das hat jedoch alles nicht funktioniert und ich weiss nun auch nicht mehr weiter.
Hallo samfisch3r,
der Event ist ja schon registriert
für alle Controls?
herbivore
ja da ich ja die neuen Funktionen nicht selbst schreibe sondern sie mir generieren lasse indem ich im Design Fenster alles einstelle und für die Ereignisse einfach einen Doppelklick mache.
edit: ich habe noch einiges ausgetestet mit KeyPress und KeyDown jedoch ist KeyPress noch etwas schlechter als KeyDown da dort nicht alle Tasten funktionieren, bei KeyDown ist es nur die Enter-Taste welche nicht funktioniert.
gibt es denn hier niemanden der das schon mal gemacht hat mit der Enter-Taste? Jede andere Taste funktioniert nur die Enter-Taste lässt sich nicht aufhalten und drückt einfach den Button der zuletzt angewählt wurde.
Es sollte aber wenn die Enter-Taste gedrückt wird zuerst ein Button angewählt werden und dieser dann gedrückt werden.
so wies aussieht handelt es sich hier um ein sehr schwieriges Problem bei dem sogar die Profis verzweifeln 😉
Hallo samfisch3r,
nö, ich würde eher sagen, die Lösung wurde mehrfach genannt.
herbivore
Wenn du damit PreviewKeyDown dann ist das leider nicht so auch da kommt es zum selben Ergebnis wie mit KeyDown oder KeyPress.
Ich weiss ja nicht ob das bei dir Funktioniert bei mir geht das zumindest nicht.
so ich Poste mal meinen Programm code damit ihr das mal anschauen könnt und vielleicht den Fehler entdeckt.
das einzige was im zZ nicht geht ist der letzte Befehl mit dem Enter:
if(e.KeyCode == Keys.Enter)
{
button18.Select();
button18.PerformClick();
}
ich habe diesen wieder in die MainFormKeyDown gestellt da es auch mit MainFormPreviewKeyDown nicht funktioniert hat.