Forum: PC-Programmierung C# mit Taste Panel verschieben


von Csharper (Gast)


Lesenswert?

Hallo
Ich möchte mir ein kleines "Spiel" in c# programmmieren. Dazu will ich 
ein Panel mit den Pfeiltasten oder den WASD Tasten herumschieben. Das 
schieben funktioniert, jedoch erst mittels der Buttons. Diese möchte ich 
ersetzen.
Wie kann ich auswerten, welche Taste das gedrückt wurde?
Bin absoluter C# anfänger!
Vielen dank!

von Christopher (Gast)


Lesenswert?

So?
1
        private void Form1_KeyDown(object sender, KeyEventArgs e)
2
        {
3
            switch (e.KeyCode)
4
            {
5
                case Keys.W:
6
                    //bewege Panel
7
                    break;
8
9
                case Keys.A:
10
                    //bewege Panel
11
                    break;
12
13
                case Keys.S:
14
                    //bewege Panel
15
                    break;
16
17
                case Keys.D:
18
                    //bewege Panel
19
                    break;
20
            }
21
        }

von Frank M. (aktenasche)


Lesenswert?

den code musst du dann noch an den subscriber hängen.

einfacher: in der "properties" toolbox auf den kleinen blitz klicken und 
da nach "keydown" suchen dann auf das leere feld doppelklicken. 
natürlich wenn dein hauptfenster gerade ausgewählt ist.

die vorgehensweise bezieht sich auf visual studio 2010

von Sam .. (sam1994)


Lesenswert?

Problem ist nur, so ziemlich jedes Element deines Formulars kann gerade 
aktiv sein. Deswegen sollte man auch jedes KeyDown-Event darauf zeigen 
lassen.

Oder man bedient sich DirectX und wertet so die gedrückte Taste aus 
(damit kann man dann auch grafisch gute Spiele in c# programmieren). 
Aber wenn du Anfänger bist bleib erstmal bei KeyDown.

von Frank M. (aktenasche)


Lesenswert?

in dem fall müsste es ja reichen nach jedem keydown event ein 
Form1.Focus() dran zu hängen oder?

ansonsten geb ich dir recht. interessante frage wie man das machen kann.

könnte man sich nicht theoretisch ins windows messaging system 
reinhängen und da die keydowns abfangen?

von Arc N. (arc)


Lesenswert?

Samuel K. schrieb:
> Problem ist nur, so ziemlich jedes Element deines Formulars kann gerade
> aktiv sein. Deswegen sollte man auch jedes KeyDown-Event darauf zeigen
> lassen.

Oder im Hauptformular KeyPreview = true setzen sollte meistens genügen
http://msdn.microsoft.com/de-de/library/system.windows.forms.form.keypreview(v=VS.100).aspx

> Oder man bedient sich DirectX und wertet so die gedrückte Taste aus
> (damit kann man dann auch grafisch gute Spiele in c# programmieren).
> Aber wenn du Anfänger bist bleib erstmal bei KeyDown.

von Sam .. (sam1994)


Lesenswert?

Frank Meier schrieb:
> könnte man sich nicht theoretisch ins windows messaging system
> reinhängen und da die keydowns abfangen?

Da wird es mit DX aber deutlich einfacher. Man muss das SDK jedoch 
installieren.

Hier kannst du den Aufwand sehen, mehr als ein paar Zeilen sind es nicht 
(http://www.riemers.net/eng/Tutorials/DirectX/Csharp/Series1/tut9.php). 
Allerdings hab ich schon länger nichts mehr mit DX gemacht, eher XNA.

von Sven H. (dsb_sven)


Lesenswert?

XNA ist auch, meiner Meinung nach, deutlich einfacher und 
Einsteigerfreundlicher als DX.

Vor allem das verschieben von Rechtecken gestaltet sich mit der 
SpriteBatch wirklich wirklich wirklich trivial.


Alternativ könntest du auch ein Panel nehmen und da dein Rechteck rein 
zeichnen und die Position verändern. Das geschieht mir Panlen.OnPaint() 
(oder so ähnlich).

Dann kommst du mit Graphics g an Zeichenwerkzeug für solche einfachen 
dinge.


Nachtrag:

Ich habe bei schnellen Änderungen und gefüllten Flächen manchmal ein 
Flackern feststellen müssen. Ob ich nur zu doof bin, das in den Griff zu 
bekommen weiß ich aber nicht.

Nachtrag 2:

Für XNA gibbet von MS schon nen Tut für ein ganz einfaches "Spiel":
http://msdn.microsoft.com/de-de/library/bb203893.aspx

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.