Laden...

C# - Arrow Key reagieren nicht mehr nach Hinzufügen eines Buttons

Erstellt von Moto vor 2 Jahren Letzter Beitrag vor 2 Jahren 196 Views
M
Moto Themenstarter:in
3 Beiträge seit 2021
vor 2 Jahren
C# - Arrow Key reagieren nicht mehr nach Hinzufügen eines Buttons

Hallo zusammen,

ich habe eine WindowsFormApplication erstellt. Auf dieser Form1 habe ich dann ein paar Zeichen mit der "protected override void OnPaint(PaintEventArgs e)" - Methode gemalt. Außerdem habe ich eine "protected override void OnKeyDown(KeyEventArgs e)" - Methode erstellt. Diese Methode soll dann auf die Pfeiltasten reagieren können. Alles hat auch wunderbar geklappt.

Nun habe ich per Toolbox einen Button hinzugefügt und bei diesem mit Doppelklick die Methode "private void button1_Click_1(object sender, EventArgs e)" erzeugen lassen. Hier habe ich dann wieder Code eingefügt und er wird dann auch ausgeführt. Jetzt ist es aber so, dass die OnKeyDown-methode nicht mehr auf meine Pfeiltasten reagiert und ich weiß nicht warum.

Ich habe dann auch mal probiert einen weiteren Button einzufügen und festgestellt, dass ich mit den Pfeiltasten zwischen diesen Button navigieren kann. Ich vermute also, dass ich anscheinend nicht mehr wirklich auf der Forms bin sondern eine Ebene höhere. Wie kann ich das denn dann umstellen?

Das ist bisher was ich gemacht habe:


protected override void OnKeyDown(KeyEventArgs e)
        {
            Debug.WriteLine("hello Keyevent");
        }
        private void button1_Click_1(object sender, EventArgs e)
        {
            Debug.WriteLine("hello button");
        }


Paint-Method:
        protected override void OnPaint(PaintEventArgs e)
        {

            grafik = e.Graphics;
            using (Font font1 = new Font("Arial", 20, FontStyle.Regular, GraphicsUnit.Point))
            {

                StringFormat TextFormat = new StringFormat()
                {

                    Alignment = StringAlignment.Center,

                };

                Rectangle myRectangle = new Rectangle();

                for (int i = 0; i < maze.GetLength(0); i++)
                {


                    for (int j = 0; j < maze.GetLength(1); j++)
                    {
                        string sign = char.ToString(Labyrinth[i, j]);
                        myRectangle.Location = new Point(i * 30, j * 30);
                        myRectangle.Size = new Size(10, 10);


                                grafik.DrawString(sign, font1, red, myRectangle, TextFormat);

                    }
                }
            }
        }

Ich habe schon so viel rumgegoogelt und auch alle möglichen Sachen ausprobiert. z.B. auch mal ein seperates Panel für den Eintrag der Zeichen erstellt, aber hat auch nicht geklappt. Kann mir bitte jemand einen Hinweis geben, wie ich hier weitermachen könnte?

Viele Grüße

Moto

4.939 Beiträge seit 2008
vor 2 Jahren

Hallo und willkommen,

ja, das liegt daran, daß der Button den Fokus hat und dann die Arrow-Keys zur Navigation benutzt werden.
Ändern kannst du das, wenn du die Eigenschaft KeyPreview auf true stellst, s.a. [erledigt] Das Button_KeyDown Event ignoriert Druck auf die Pfeiltasten.

M
Moto Themenstarter:in
3 Beiträge seit 2021
vor 2 Jahren

Hallo und willkommen,

ja, das liegt daran, daß der Button den Fokus hat und dann die Arrow-Keys zur Navigation benutzt werden.
Ändern kannst du das, wenn du die Eigenschaft KeyPreview auf true stellst, s.a.
>
.

Super und vielen Danke! Ich habe tatsächlich nach langem Suchen dann auch noch folgendes gefunden und es hat geklappt:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)

Komisch war dann nur, dass wenn ich 2 Buttons hinzufüge er zwar in dem Form sich bewegt, aber noch zusätzlich zwischen den zwei Buttons hin und her springt.

M
Moto Themenstarter:in
3 Beiträge seit 2021
vor 2 Jahren

Perfekt, danke. Damit kann ich dann gut arbeiten 🙂.