17. februar 2012 - 13:57 Der er 8 kommentarer og
2 løsninger

Registrer tryk på tastatur

Jeg er lige startet med c# programmering og er igang med at lave en simpel regnemaskine. Jeg har udregningerne til at virke, men jeg mangler at kunne bruge numpad tasterne. Så jeg skal bruge en kode der registrer når jeg trykker på en knap på tastaturet og hvilken knap det er. Ved ikke om jeg skal lave en kode for HVER knap, eller om man kan lave en kode der kan tjekke trykket og indsætte det i en variabel. Ved ikke om det er til at forstå hvad jeg mener!?

Håber i har nogle forslag.

På forhånd tak for hjælpen.
Avatar billede Syska Mester
17. februar 2012 - 14:21 #1
Kan du vise hvad du har lavet nu?

Normaltvis så bruger man jo TextBox og af den grund er det jo ikke nødvendigt at kontrolle hvad der bliver trykket på.

Hvis det er for at detech /%+- og de andre operators, så kan du bruge KeyPress, KeyUp eller en anden event.

mvh
17. februar 2012 - 17:34 #2
Jamen jeg har en form med knapperne på, samt en textbox1. Jeg startede med at programmere for 3 dage siden, så det med at sige jeg kan bruge keypress eller en anden event, hjælper mig meget lidt :D Jeg skal bruge et stykke kode, som indsætter det tal jeg trykker på, på tastaturet, i texbox1, samt en variabel jeg har, der hedder indtastet. Pt ser min kode sådan her ud:

    private void Form1_KeyPress(object sender, KeyPressEventArgs e)
    {
       
    }

Så er jeg kommet frem til at jeg skal bruge noget med KeyChar, kan det passe?
17. februar 2012 - 17:42 #3
Rettelse. Min kode ser nu sådan her ud:

    private void Form1_KeyPress(object sender, KeyPressEventArgs e)
    {
        textBox1.AppendText(Convert.ToString(e.KeyChar));
    }

Nu mangler jeg så en måde at udspecificere det lidt på:
1. når jeg trykker på et tal, skal det ryge op i textbox1.
2. Når jeg trykker på +,-,* eller /, skal den regne.
3. Når jeg trykker på Enter, skal den give resultatet.
4. Når jeg trykker på alt andet, skal den ikke gøre noget.

How to?
Avatar billede Syska Mester
17. februar 2012 - 17:43 #4
http://msdn.microsoft.com/en-us/library/system.windows.forms.keypresseventargs.aspx

e.KeyChar ... og den kan du append til din string.

indtastet += e.KeyChar;
Avatar billede Syska Mester
17. februar 2012 - 17:46 #5
swtich(e.KeyChar)
{
case KeyChar.Plus:
// do some calc on plus
break;
case KeyChar.Minus:
// do some calc on minus
break;

case KeyChar.Num1:
case KeyChar.Num2:
// add to the string
break;

default:
break;
}

Håber overstående giver mening. Jeg er dog ikke sikker på de hedder Num1, Num2 etc.

mvh
17. februar 2012 - 17:54 #6
Så kan jeg da lige hjælpe dig lidt:
http://msdn.microsoft.com/en-us/library/system.windows.forms.keys.aspx

Det hedder NumPad1 osv.

Jeg har lige netop lært lidt om case, så tror nok jeg kan bygge det ud fra det du skriver der. Jeg prøver lige en gang og så får du en melding. :) Foreløbig mange tak :)
19. februar 2012 - 23:52 #7
Okay, nu har jeg lavet et program der virker, med hjælp fra en kollega. Vil gerne dele med jer andre, hvad jeg kom frem til, men det fylder RET meget, så synes ikke lige jeg vil poste det her. Men jeg har brugt KeyDown og så laver jeg en switch på KeyData der ser således ud:

Switch(e.KeyData)
  Case Keys.Add:
      btn_Add.PerformClick();
      break;
  Case Keys.Subtract
      btn_Subtract.PerformClick();
      break;
  osv.


hvor btn_* repræsenterer den knap på regnemaskinen der passer til den knap jeg har trykket på, på mit tastatur.

Husk at sætte KeyPreview = true på din form, for at den registrer når du trykker på tastaturet.
19. februar 2012 - 23:54 #8
Det lige herover er så svaret, kom bare til at poste det som kommentar.

buzzzz>> Vil gerne give dig nogle point for at hjælpe mig og jeg har også brugt det du skrev med, til at komme frem til den endelige løsning. Så skriv venligst et svar, så jeg kan smide point efter dig. :) Og tak for hjælpen.
Avatar billede Syska Mester
20. februar 2012 - 00:06 #9
Svar.

Hjælp til selvhjælp synes jeg altid er det bedste. Derfor mit svar på den måde. I sidste ende er det kun en selv man straffer, hvis man får det hele lavet, som mange ofte forventer.

Men der er måske nogen ting som kunne laves smartere, det skal jeg ikke lige kunne sige.

Men en ide du kan prøve.

Button har en Tag property som kan indeholde et object. Alt i .NET er et object.

Du kan så på alle dine button sætte Keys.[Add f.eks].

Derefter kan du lede din form igennem eller et Panel, for alle "Control" som Button arver fra og se om dens Tag property er sat og om den er sat til den e.KeyData ... på den måde kan du måske spare noget kode. ( Dvs den part hvor du laver en switch case på de buttons du vil håndtere ).

Men det vil så selvf give lidt kode hvor du skal assign Keys.[Add f.eks] til Tag.

mvh
Avatar billede Syska Mester
20. februar 2012 - 00:06 #10
svar
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



IT-JOB

Udviklings- og Forenklingsstyrelsen

Data Scientist til stærkt data- og analysekontor

Udviklings- og Forenklingsstyrelsen

Business Analyst med flair for test

Sparekassen Danmark

Systemudvikler