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
Button auswählen per Tastedruck
gizeK
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

Button auswählen per Tastedruck

beantworten | zitieren | melden

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
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 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
private Nachricht | Beiträge des Benutzers
gizeK
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

beantworten | zitieren | melden

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
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 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
private Nachricht | Beiträge des Benutzers
gizeK
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

beantworten | zitieren | melden

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
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 gizeK,

sorry, ich meinte natürlich Text. Ich habe es oben verbessert.

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



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

beantworten | zitieren | melden

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}");
	}
}
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von samfisch3r am .
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,

versuche es mal mit PreviewKeyDown.

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



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

beantworten | zitieren | melden

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
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,
Zitat
lässt sich das ganze nicht mehr kompilieren
[Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)
[Hinweis] Wie poste ich richtig? Punkt 5

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



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

beantworten | zitieren | melden

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
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,

ist doch eine klare Sache, oder? Für PreviewKeyDown musst du einen PreviewKeyDownEventHandler verwenden keinen KeyDownEventHandler.

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



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

beantworten | zitieren | melden

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
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,

eigentlich sollte es gehen. Also das Enter solltest du in PreviewKeyDown behandeln können und alles andere wie gehabt in KeyDown.

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



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

beantworten | zitieren | melden

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

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
private Nachricht | Beiträge des Benutzers
samfisch3r
myCSharp.de - Member



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

beantworten | zitieren | melden

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.
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,
Zitat
der Event ist ja schon registriert
für *alle* Controls?

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



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von samfisch3r am .
private Nachricht | Beiträge des Benutzers
samfisch3r
myCSharp.de - Member



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
samfisch3r
myCSharp.de - Member



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

beantworten | zitieren | melden

so wies aussieht handelt es sich hier um ein sehr schwieriges Problem bei dem sogar die Profis verzweifeln
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,

nö, ich würde eher sagen, die Lösung wurde mehrfach genannt.

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



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
samfisch3r
myCSharp.de - Member



Dabei seit:
Beiträge: 26
Herkunft: Schweiz

beantworten | zitieren | melden

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.
Attachments
private Nachricht | Beiträge des Benutzers