Autor Beitrag
MarcusDidius
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 05.11.11 19:27 
Hallo ich versuche das KeyDown Event einer Form zu behandeln.
(Ich versuche das letzte Beispiel aus "Heard First C#" aus Kapitel 4 nachzukochen)
Dazu habe ich auf der Form den EventListener KeyDown angelegt.
Wenn ich das Programm laufen lasse reagiert es nicht auf Tastatureingaben.
Ich habe einen Breakpoint in dem EventListener gesetzt und sehe dass die Methode nie aufgerufen wird.

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
namespace TypingGame
{
    public partial class Form1 : Form
    {
        Random random = new Random();
        Stats stats = new Stats();

        public Form1()
        {
            InitializeComponent();
 
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            listBox1.Items.Add((Keys)random.Next(6590));
            if (listBox1.Items.Count > 7) {
                listBox1.Items.Clear();
                listBox1.Items.Add("Game Over");
                timer1.Stop();
            }
        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (listBox1.Items.Contains(e.KeyCode))
            {
                listBox1.Items.Remove(e.KeyCode);
                listBox1.Refresh();
                if (timer1.Interval > 400)
                {
                    timer1.Interval -= 10;
                }
                if (timer1.Interval > 250)
                {
                    timer1.Interval -= 7;
                }
                if (timer1.Interval > 100)
                {
                    timer1.Interval -= 2;
                }
                difficultyProgressBar.Value = 800 - timer1.Interval;
                stats.Update(true);
            }
            else
            {
                stats.Update(false);
            }
            correctLabel.Text = "Correct: " + stats.Correct;
            missedLabel.Text = "Missed: " + stats.Missed;
            totalLabel.Text = "Total: " + stats.Total;
            accuracyLabel.Text = "Accuracy: " + stats.Accuracy + " %";
        }
    }
}

Wenn ich runtergeladene Lösung aus dem Buch laufen lasse funktioniert das Programm, aber ich kann keine Unterschiede im Quellcode finden.

Hat jemand eine Ahnung an was das liegen könnte? Muss ich irgendwelche Properties modifizieren damit auf Tastatureingaben reagiert wird?

Vielen Dank für jeden Hinweis,

Hans
pdelvo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 55
Erhaltene Danke: 11



BeitragVerfasst: Sa 05.11.11 19:38 
Du hast keinen Event Handler registriert. Das machst du entweder im Designer(so wird es im Beispiel warscheinlich sein), oder du schreibs z.B. in den Konstruktor:

ausblenden C#-Quelltext
1:
KeyDown += Form1_KeyDown;					


Dann sollte es funktionieren.

So steht die Methode dort drin und das Form weiss nicht, dass es sie aufrufen soll
MarcusDidius Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 05.11.11 19:52 
Hat eigenlicht schon der Designer gemacht:
ausblenden C#-Quelltext
1:
2:
3:
4:
private void InitializeComponent()
{
     //....
     this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);

Ich habe eine ListBox auf der Form. Kann es sein, dass die die Events irgenwie "schluckt"?

Danke,

Hans
Troubadix
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 28
Erhaltene Danke: 9

WIN 7
C# (VS2010 Express)
BeitragVerfasst: Sa 05.11.11 21:28 
Hallo MarcusDidius.

Hast Du in deiner Form die Eigenschaft KeyPreview auf true stehen? Wenn nicht geht das Key Event an das Element auf der Form das gerade den Focus hat.

Und nicht Vergessen e.handled auf true zu setzen wenn Du den Tastendruck in deinem Event abgefangen hast.

Gruß
Troubadix
MarcusDidius Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 06.11.11 18:59 
KeyPreview = True
hats gelöst.

Vielen Dank!