Avatar billede lordsaxo Nybegynder
08. maj 2006 - 23:29 Der er 10 kommentarer og
1 løsning

Læse hvilke(n) tast(er) der bliver trykket på

Hej Eksperter.

Jeg er ligenu igang med et maskinskrivningsprogram til et eksamensprojekt på htx 2. år. I mit program skal brugeren skrive en bestem linie i et text-felt, men kun kunne skrive de rigtige bogstaver, og altså ikke de forkerte.

Systemet skal derfor kunne genkende specialtegn som æøå,.- osv, og sammenligne dem med den linie der skrives.
Ligenu bruger jeg KeyDown-event, og e.KeyCode.ToString() til at identificere hvilken tast der bliver trykket. MEN, jeg kan f.eks. ikke finde ud af om det er højre eller venstre shift der bliver trykket på, og om brugeren skriver stort eller småt A (dvs. holder shift nede).
Min nuværende kode kan ses her:
http://n-club.dk/code.txt

Nu er mit spørgsmål så:
Hvordan kan jeg læse de taster brugerne trykker på, så jeg kan få alle taster med, samt bestemme og brugeren skriver store eller små bogstaver, og om der bruges højre eller venstre shift-knap til det?

På forhånd tak.
Avatar billede arne_v Ekspert
09. maj 2006 - 02:17 #1
if(e.KeyCode == Keys.A && e.Shift)
{
  // stort A
}
else if(e.KeyCode == Keys.A && !e.Shift)
{
  // lille A
}

så vidt jeg lige kan se i docs så skelner .Shift ikke mellem højre og venstre
shift
Avatar billede lordsaxo Nybegynder
09. maj 2006 - 17:24 #2
Det du skriver der arne, virker ikke. Eftersom det er et KeyDown event, registrer den kun når man trykker tasterne ned, og ikke holder dem nede.
Jeg løste istedet mit problem ved at sætte int usedShift = 1 når "ShiftKey" blev trykket. Hvis usedShift er et, sætter den så UpperCase på, hvis ikke, lowercase, og nulstiller usedShift. Kan smide kode op, hvis der er nogle der virkelig gerne vil se min skumle løsning. ;)
Avatar billede Syska Mester
09. maj 2006 - 20:21 #3
Brug Arne's, den er da meget bedre..... på den måde er du også fri for at holde styr på den ekstra int til at finde ud af om "shift" er trykket ned...

// ouT
Avatar billede lordsaxo Nybegynder
10. maj 2006 - 02:38 #4
Buzz, hvis du læser hvad jeg skriver, så virker Arne's altså ikke.den registrerer ikke e.Shift sammen med en anden KeyCode.
Ihvertfald ikke da jeg forsøgte mig med det.
Avatar billede arne_v Ekspert
10. maj 2006 - 04:44 #5
det virker hos mig med KeyDown
Avatar billede arne_v Ekspert
10. maj 2006 - 04:47 #6
using System;
using System.Drawing;
using System.Windows.Forms;

namespace E
{
    public class MainForm : Form
    {
        private TextBox textBox1;
       
        public MainForm()
        {
            InitializeComponent();
        }
       
        [STAThread]
        public static void Main(string[] args)
        {
            Application.Run(new MainForm());
        }
       
        private void InitializeComponent() {
            textBox1 = new TextBox();
            SuspendLayout();
            textBox1.Location = new Point(25, 25);
            textBox1.Multiline = true;
            textBox1.Size = new Size(150, 150);
            textBox1.Text = "";
            textBox1.KeyDown += new KeyEventHandler(TextBox1KeyDown);
            ClientSize = new Size(200, 200);
            Controls.Add(textBox1);
            Text = "Test";
            ResumeLayout(false);
        }

        void TextBox1KeyDown(object sender, KeyEventArgs e)
        {
            if(e.KeyCode == Keys.A && e.Shift)
            {
                MessageBox.Show("stort A");
            }
            else if(e.KeyCode == Keys.A && !e.Shift)
            {
                MessageBox.Show("lille a");
            }
        }
       
    }
}
Avatar billede Syska Mester
13. maj 2006 - 12:56 #7
Jeg har selv brugt det, så jeg må også give Arne_v ret, det virker altså.

// ouT
Avatar billede lordsaxo Nybegynder
19. juni 2006 - 06:32 #8
Jeg har faktisk ikke fået testet Arne_v's løsning, da jeg under projektet ikke rigtig havde tid til at omkode noget der virkede... Jeg havde en deadline, og ingen ville alligevel tjekke koden. ;-) (Min programmeringslærer kunne ikke engang C#, jeg fik bare lov til at rode med det mens de andre legede med Delphi, og det gav mig også et 11-tal i den endelige årskarakter)

Arne, det er en fin løsning - hvis du smider svar kan du lige få point. ;-)
Avatar billede arne_v Ekspert
19. juni 2006 - 12:44 #9
ok
Avatar billede Syska Mester
19. juni 2006 - 18:03 #10
Hvad udd.?
Avatar billede lordsaxo Nybegynder
20. juni 2006 - 17:43 #11
HTX - har netop afsluttet 2. år, med et samlet snit på 9,2. Så må vi se om det kan lykkes mig at få det op på 9,6 næste år. ;)
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