Avatar billede andersbodilsen Nybegynder
01. september 2006 - 20:04 Der er 8 kommentarer

Keyeventhandler - virker ikke.

Hej Alle Eksperter.

Jeg sidder og prøver at smide noget kode sammen der kan reagere på nogle tastetryk på keyboardet. Det virker altsammen fint så længe jeg kun har en tom form, men lige så snart jeg sætter en knap ind på formen reagere den ikke længere.... Hvorfor!!! ?

Her er et en forsimplet udgave afmin Form1 kode:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.KeyDown += new KeyEventHandler(Form1_KeyDown);

           
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            <--- Noget kode --->
        }
    }
Avatar billede nielle Nybegynder
01. september 2006 - 21:08 #1
Som den eneste kontrol på Form'en får din Button automatisk Focus. Det er derfor den som modtager tastetrykkende i stedet for din Form.
Avatar billede bulgroz Nybegynder
01. september 2006 - 21:08 #2
Har du forsøgt at sætte KeyPreview til true på din form?
Avatar billede andersbodilsen Nybegynder
01. september 2006 - 23:18 #3
Har lige prøvet at sætte KeyPreview til true... Har ingen effect. Hvordan for man formen til at holde fokus, i stedet for knappen?
Avatar billede nielle Nybegynder
01. september 2006 - 23:38 #4
KeyPreview=true virker ganske udemærket hos mig:

        public Form1()
        {
            InitializeComponent();
            this.KeyPreview = true;
        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            MessageBox.Show("Form1_KeyDown");
            e.Handled = false;
        }

        private void button1_KeyDown(object sender, KeyEventArgs e)
        {
            MessageBox.Show("button1_KeyDown");
        }

Uden den, er det kun button1_KeyDown() som bliver kaldt. Med den, og med e.Handled = false, bliver både Form1_KeyDown() og derefter button1_KeyDown() kaldt.

Det lader i øvrigt ikke til at der er nogen metode til at forhindre at knappen får fokus når den indsættes. Jeg kan i hvert fald ikke finde den.
Avatar billede nielle Nybegynder
11. september 2006 - 20:50 #5
Har du fået det til at virke?
Avatar billede andersbodilsen Nybegynder
13. september 2006 - 23:47 #6
Nej, det virker stadig ikke for mig. Hvad er forskellen i dit og mit eksempel?

public Form1()
        {
            this.KeyPreview = true;
            InitializeComponent();
            this.KeyDown += new KeyEventHandler(Form1_KeyDown);

         
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            <--- Noget kode --->
        }
    }
Avatar billede bulgroz Nybegynder
14. september 2006 - 08:32 #7
Prøv at sætte
this.KeyPreview = true;
efter at InitializeComponent() er blevet kaldt!
Avatar billede nielle Nybegynder
20. september 2006 - 21:06 #8
bulgroz> Rækkefølgen gøre ingen forskel.

andersbodilsen> I min kode har jeg en Form og på den er der en enkel Button.

Jeg har tilføjet eventhandlere på KeyDown for både formen og for knappen. Da det er gjort via Visual Studio ligger koden for dette i InitializeComponent(). Jeg ved ikke lige hvorfor at du tilføjer en KeyDown i din Form1-constructor? Måske har du faktisk denne linje hele to gange, en i InitializeComponent() og en i Form1().

Derudover har jeg tilføjet en linje kode sådan at jeg kan se når de to KeyDown-eventhandlere bliver aktiveret. Hvis jeg har formen fremme og trykker på en vilkårlig tast får jeg to MessageBox'e op: først den for Form1_KeyDown(), og når jeg trykker på Ok-knappen, den for button1_KeyDown().

Uden KeyPreview-linjen, får jeg kun den for button1_KeyDown().
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester