Laden...

Button auswählen per Tastedruck

Erstellt von gizeK vor 16 Jahren Letzter Beitrag vor 16 Jahren 5.296 Views
G
gizeK Themenstarter:in
3 Beiträge seit 2007
vor 16 Jahren
Button auswählen per Tastedruck

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

49.485 Beiträge seit 2005
vor 16 Jahren

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

G
gizeK Themenstarter:in
3 Beiträge seit 2007
vor 16 Jahren

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

49.485 Beiträge seit 2005
vor 16 Jahren

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

G
gizeK Themenstarter:in
3 Beiträge seit 2007
vor 16 Jahren

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

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo gizeK,

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

herbivore

S
26 Beiträge seit 2007
vor 16 Jahren

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

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo samfisch3r,

versuche es mal mit PreviewKeyDown.

herbivore

S
26 Beiträge seit 2007
vor 16 Jahren

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

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo samfisch3r,

lässt sich das ganze nicht mehr kompilieren [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)
[Hinweis] Wie poste ich richtig? Punkt 5

herbivore

S
26 Beiträge seit 2007
vor 16 Jahren

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

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo samfisch3r,

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

herbivore

S
26 Beiträge seit 2007
vor 16 Jahren

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

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo samfisch3r,

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

herbivore

S
26 Beiträge seit 2007
vor 16 Jahren

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

49.485 Beiträge seit 2005
vor 16 Jahren

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

S
26 Beiträge seit 2007
vor 16 Jahren

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.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo samfisch3r,

der Event ist ja schon registriert

für alle Controls?

herbivore

S
26 Beiträge seit 2007
vor 16 Jahren

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.

S
26 Beiträge seit 2007
vor 16 Jahren

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.

S
26 Beiträge seit 2007
vor 16 Jahren

so wies aussieht handelt es sich hier um ein sehr schwieriges Problem bei dem sogar die Profis verzweifeln 😉

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo samfisch3r,

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

herbivore

S
26 Beiträge seit 2007
vor 16 Jahren

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.

S
26 Beiträge seit 2007
vor 16 Jahren

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.