Zum Inhalt springen

c# "if-Bedingungen"


Empfohlene Beiträge

Geschrieben (bearbeitet)

Hallo!

Zuerst mal kurz zu mir, ich bin 17 Jahre alt und mache seit 01.09.2009 eine Ausbildung zum Fachinformatiker in Systemintegration.

Habe gerade nicht viel zu tun, und wollte nun in VS C# programmieren.

Da ich schon etwas länger an einer Anwendung programmiere, ist das hier nun nur ein Teil davon.

So nun zu meinem Problem:

Ich möchte, dass wenn man bei geöffnetem Fenster 2 Tasten eingibt, eine Meldung ausgegeben wird.

bis jetzt sieht mein code dafür so aus:

private void Form1_KeyDown(object sender, KeyEventArgs e)

        {

            if (e.KeyData == Keys.A && e.KeyData == Keys.

            {

                MessageBox.Show("Taste A und B wurden gedrückt.");

            }

        }[/code]

Nur werden die Tasten nicht erkannt. Was ist falsch daran?

[Edit] Schreibe ich nur " if (e.KeyData == Keys.A) wird die Taste erkannt und die Nachricht ausgegeben.[/Edit]

Dann habe ich noch ein Problem. Eigentlich soll nicht Taste A und B gedrückt werden, sondern eine Meldung (nicht die Beispielmeldung oben) soll bei einer Tastenkombination wie z.B. "alt+T" ausgegeben werden.

Im Internet bin ich auf das hier gestoßen:

MSDN-Microsoft

Leider kann ich damit jetzt nichts anfangen, da ich noch in den Anfängen des Programmierens stecke. Ich hoffe ihr könnt mir helfen,

Danke und Gruß,

Fedon

Bearbeitet von Fedon
Geschrieben

Nur werden die Tasten nicht erkannt. Was ist falsch daran?

[Edit] Schreibe ich nur " if (e.KeyData == Keys.A) wird die Taste erkannt und die Nachricht ausgegeben.[/Edit]

Weil e.KeyData entweder gleich Keys.A oder gleich Keys.B sein kann, jedoch niemals gleich beidem.

Geschrieben

Der Referenz zufolge würde ich das so realisieren:

    if (e.KeyCode == Keys.Alt && e.KeyCode == Keys.T) {

        MessageBox.Show("Tasten Alt und T wurden gedrückt!");

}
Probiers mal aus und gib Bescheid =) EDIT: Wenn Bubble recht hat, probiers mit:

    if (e.KeyCode == Keys.Alt) {

        if(e.KeyCode == Keys.T) {

            MessageBox.Show("Tasten Alt und T wurden gedrückt!");

        }

    }

Geschrieben

zmd. akzeptiert er damit "alt", aber die MessageBox wird trotzdem nicht ausgegeben..

Danke bis hierher für die Antworten, freu mich auch über weitere, bin jetzt aber bis morgen früh hier nicht mehr online

Gruß, Fedon

Geschrieben

EDIT: Wenn Bubble recht hat, probiers mit:

Natürlich habe ich recht. Eine Variable kann zu einem Zeitpunkt immer nur einen Wert haben.

Ihr macht den Fehler, ALT wie eine Taste und nicht wie einen Modifier zu behandeln. Wenn die Form (und kein anderes Control) den Focus hat, dann kann man z.B. auf ALT+A so prüfen:


private void Form2_KeyDown(object sender, KeyEventArgs e)

{

	if (e.KeyCode == Keys.A && e.Modifiers == Keys.Alt)

	{

		System.Windows.Forms.MessageBox.Show("ALT+A (KeyDown event)");

	}

}

Geschrieben

Ihr macht den Fehler, ALT wie eine Taste und nicht wie einen Modifier zu behandeln.

Da Alt eine Sondertaste ist: KeyEventArgs.Alt

Ansonsten weiß ich zwar nicht, wie die Modifiers verknüpft werden können, aber ich würde Alt als binär-or abfragen, da sonst das problem auftritt, wenn ctrl und alt zusammen genutzt werden.

Geschrieben
Da Alt eine Sondertaste ist: KeyEventArgs.Alt

Dieses Property kann man auch auswerten, allerdings würde, wenn man nur dieses eine Property (in dem Beispiel oben e.Alt) auf wahr prüft, auch eine Kombination von z.B. CTRL+ALT+A die if-Bedingung erfüllen. Um das zu verhindern, müsste man noch weitere Properties wie Control und Shift auswerten. In meinem Beispiel hingegen würde nur auf ALT+A reagiert werden.

Ansonsten weiß ich zwar nicht, wie die Modifiers verknüpft werden können, aber ich würde Alt als binär-or abfragen, da sonst das problem auftritt, wenn ctrl und alt zusammen genutzt werden.

Was ist mit diesem Satz gemeint?

Geschrieben
Was ist mit diesem Satz gemeint?

KeyEventArgs.Modifiers Property

Gets the modifier flags for a KeyDown or KeyUp event. The flags indicate which combination of CTRL, SHIFT, and ALT keys was pressed.

D.h. da können mehrere Sachen drin stehen, eine einfache Überprüfung (e.Modifiers == Keys.Alt) würde dann nicht bei gedrücktem CTRL funktionieren.

Deswegen binär-OR um abzufragen, ob das Flag gesetzt ist.

Geschrieben
D.h. da können mehrere Sachen drin stehen, eine einfache Überprüfung (e.Modifiers == Keys.Alt) würde dann nicht bei gedrücktem CTRL funktionieren.

Das ist auch das vom Fragesteller gewünschte Verhalten:

soll bei einer Tastenkombination wie z.B. "alt+T"

Er will z.B. auf ALT+T reagieren und nicht auf CTRL+ALT+T.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...