5 Näppäimistö. 5.1 Näppäimistön eventit



Samankaltaiset tiedostot
10 Lock Lock-lause

Lupa opetuskäyttöön pyydettävä. Näppäimistö. Kohdistimen ohjausnäppäimistö. Funktionäppäimistö. Kirjoitusnäppäimistö

C# Windows ohjelmointi perusopas

1. Miten tehdään peliin toinen maila?

2010-luvun kansalaistaito: Windows-puhelimen ohjelmointi. Kai Lindgren, Teollinen tuotanto/metropolia

Pong-peli, vaihe Rajojen tarkistus Yläreunan tarkistus. Muilla kielillä: English Suomi

1. Taustatietoa näppäimistönkuuntelusta

Interaktiivinen käyttöliittymä. 2008

Web Services tietokantaohjelmoinnin perusteet

Graafisen käyttöliittymän ohjelmointi

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Sisällysluettelo. Johdanto Dot NET Microsoft.NET -alusta Käyttäjämallit Ohjelmien kehitys.net-alustalla...

Hiirisanomiin vastaaminen. 2007

C# ja.net. Juha Järvensivu 2007

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Pong-peli, vaihe Aliohjelmakutsu laskureita varten. 2. Laskurin luominen. Muilla kielillä: English Suomi

Ohjelmoinnin jatkokurssi, kurssikoe

Citizen s skill in 2010s: Programming the Windowsphone. Kai Lindgren, Industrial Production/Metropolia

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Pikanäppäin Yhdistelmiä. Luku 6 Pikanäppäimet

Osio 4: Tietovirrat. Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely

Web järjestelmän ohjelmointi Kevät 2012 Hans Nieminen

Visma Business AddOn Tuotetarrat. Käsikirja

Jypelin käyttöohjeet» Ruutukentän luominen

Microsoft Visual Studio 2005

Delegaatit ja tapahtumakäsittelijät

XNA grafiikka laajennus opas. Paavo Räisänen. Tämän oppaan lähdekoodit ovat ladattavissa näiden sivujen Ladattavat osiossa.

Metodien tekeminen Javalla

Olio-ohjelmointi Javalla

Taulukkolaskentaa selkokielellä EXCEL

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

12 Mallit (Templates)

Korpusten käsittely clt131, P Luento 4

Tapahtumat. Johdanto Ikkunointi Ikkunatapahtumat Päätapahtumasilmukka Tapahtumien käsittely Olioiden välinen kommunikointi.

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Jypelin käyttöohjeet» Miten lisään ohjaimet peliin

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

C# olio-ohjelmointi perusopas

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

C:\MyTemp\ohj1\ohjdemot\k2012\demot\vastaukset\demo11\PP1\TokaPisin.cs 1 using System; 2 using System.Collections.Generic; 3 using System.

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia?

Matopeli C#:lla. Aram Abdulla Hassan. Ammattiopisto Tavastia. Opinnäytetyö

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Näin asennat MS-DOS käyttöjärjestelmän virtuaalikoneeseen

Windowsin pikanäppäimet

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

HP Mobile -kaukosäädin (vain tietyt mallit) Käyttöopas

Kieliteknologian ATK-ympäristö Kolmas luento

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Valikot ja työkalupalkit. 2008

Luokat ja oliot. Ville Sundberg

LUKU 17 MUUTAMIA JAVA FX -SOVELLUKSIA. Tässä dokumentissa esitellään muutamia Java FX -sovelluksia.

ESIMERKKIDOKUMENTTI JARKKO IMMONEN

Ohjelmoinnin perusteet, kurssikoe

Pong-peli, vaihe Koordinaatistosta. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana

Sisältö. 22. Taulukot. Yleistä. Yleistä

TAULUKON TEKEMINEN. Sisällysluettelo

Helppokäyttöisyyttä Windows Vista käyttöjärjestelmän asetuksilla

HRTM58. Windows 10 Resurssienhallinta

Ohjelman Suositukset. Luku 5 Suositukset

...ii...iii...x. 1 Silverlight NET Framework for Silverlight Silverlight Silverlight. 2-1 Visual Studio Silverlight...

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2 3

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Dialogit. Juha Järvensivu 2007

ONSCREENKEYS 5. Windows XP / Windows Vista / Windows 7 / Windows 8

5. Alaindeksi 6. Yläindeksi 7. Poista muotoilut 8. Tasaa teksti vasemmalle

Eclipse & WindowBuilder

Ohjelmointi 2 / 2010 Välikoe / 26.3

E s i t y s g r a f i i k k a a s e l k o k i e l e l l ä MICROSOFT. PowerPoint. P e t r i V a i n i o P e t r i I l m o n e n TIKAS-SARJA

Salasanojen turvallinen tallentaminen KeePass ohjelmalla

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Sisältö. 2. Taulukot. Yleistä. Yleistä

1 Tehtävän kuvaus ja analysointi

Tech Conference Visual Studio 2015, C#6,.NET4.6. Heikki Raatikainen. #TechConfFI

Leikepöydän käyttö.net ja QT. Juha Järvensivu 2008

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Interaktiivinen tarinankerronta

12. Näppäimistöltä lukeminen 12.1

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

K ä y t t ö j ä r j e s t e l m ä s e l k o k i e l e l l ä WINDOWS MICROSOFT. Petri Ilmonen ja Juha Hällfors. -sarja

Taulukot. Jukka Harju, Jukka Juslin

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Lomakkeiden suunnittelu. Aiheina

Javan perusteita. Janne Käki

TIETORAKENTEET JA ALGORITMIT

Rinnakkaisuus (.NET) Juha Järvensivu 2007

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

Kaukosäädin (vain tietyt mallit) Käyttöopas

Ohjelmistotekniikan menetelmät, koe

Copyright 2017 HP Development Company, L.P.

Mikä yhteyssuhde on?

Apuja ohjelmointiin» Yleisiä virheitä

Java kahdessa tunnissa. Jyry Suvilehto

Transkriptio:

5 Näppäimistö Näppäimistö (Keyboard) on Windows Forms -ohjelmissa keskeisessä asemassa. Erityisesti erilaisissa tekstinkäsittelyohjelmissa ja ohjelmissa, joissa tarvitaan datan syöttämistä esimerkiksi formissa oleviin tekstikenttiin. Lisäksi näppäimistöä on kätevä käyttää ohjelman kontrollointiin. Näppäimistöä käytetään esimerkiksi monissa tietokonepeleissä pelin ohjaukseen. Näppäimistön painallukset aiheuttavat näppäimistöön liittyvien eventtien signaloinnin ja tätä kautta kyseisiin eventteihin liitettyjen tapahtumankäsittelijöiden kutsumisen. Tällä tavalla näppäinpainallukset välittyvät Windows Forms -ohjelmaan. Kuvassa 5-1 on esitetty näppäimistön näppäinpainalluksien välittyminen Windows Forms -ohjelmaan. Kuva 5-1. Näppäinpainalluksien välittyminen Windows Forms -ohjelmaan. 5.1 Näppäimistön eventit Näppäimistön käsittelyn keskeisimmät elementit ovat näppäinten painalluksiin liittyvät eventit. Formin näppäimistön nappien painalluksiin liittyy seuraavat eventit. o PreviewKeyDown o KeyDown o KeyPress o KeyUp PreviewKeyDow-eventti signaloidaan heti, kun jotakin näppäimistön nappia painetaan. KeyDow-eventti signaloidaan napin laskevalla reunalla. KeyDown-eventin signaloinnin jälkeen signaloidaan välittömästi KeyPress-eventti. KeyUp-eventti signaloidaan heti, kun nappi vapautetaan eli napin nousevalla reunalla. Näille eventeille voidaan käsin kirjoittaa tapahtumankäsittelijöiden rungot formin luokkaan. www.stickmansoft.com 71

Tapahtumankäsittelijöiden luomisessa voidaan käyttää hyväksi myös Microsoft Visual Studio -ohjelman ominaisuuksia. Microsoft Visual Studio -ohjelmassa voidaan kaikille näille neljälle eventille luoda tapahtumankäsittelijät siten, että Properties-ikkunassa olevassa Events-välilehdellä suoritetaan tuplaklikkaus kyseisten eventtien kohdalla. Tällöin Formiin liitetyn lähdetekstitiedoston sisältämään luokkaan generoidaan tapahtumankäsittelijöiden rungot. Seuraavassa on esitetty kaikkien edellä mainittujen käsittelijöiden rungot, jotka on generoitu Microsoft Visual Studio -ohjelman avulla. private void WinForm_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)... private void WinForm_KeyDown(object sender, KeyEventArgs e)... private void WinForm_KeyPress(object sender, KeyPressEventArgs e)... private void WinForm_KeyUp(object sender, KeyEventArgs e)... Kuten edellä olevien tapahtumankäsittelijöiden ohjelmarungoista näkee, niin kaikkien tapahtumankäsittelijöiden toisena parametrina on jokin EventArgs-tyyppinen parametri. Näiden parametrien avulla saadaan selvitettyä esimerkiksi mitä nappia on painettu, onko samanaikaisesti Alt-, Shift tai Control-nappi alas painettuna tai vaikka mikä on painetun napin merkkikoodi. Kuvissa 5-2, 5-3 ja 5-4 on esitetty edellä esitettyjen tapahtumankäsittelijöiden KeyPressEventArgs-, PreviewKeyDownEventArgs- ja KeyEventArgs-tyyppisten parametrien keskeisimmät ominaisuudet, joita voi hyödyntää kyseisissä tapahtumankäsittelijöissä. Kuva 5-2. KeyPressEventArgs-parametrin keskeiset ominaisuudet. 72 C# Windows-ohjelmointi

Kuva 5-3. PreviewKeyDownEventArgs-parametrin keskeiset ominaisuudet. Kuva 5-4. KeyEventArgs-parametrin keskeiset ominaisuudet. Alt, Control ja Shift ominaisuuksien avulla voi tutkia onko kyseiset napit alas painettuna, kun jotakin muutakin nappia on painettu. IsInputKey-ominaisuuden avulla saadaan selvitettyä onko painettu nappi normaali -nappi vai jokin erikoisnappi (PAGE UP, PAGE DOWN, ENTER, ESC, TAB tai jokin nuolinappi). KeyCode-ominaisuus palauttaa napin yksilöllisen näppäinkoodin. Jokaisella napilla on näppäinkoodi, mutta kaikilla napeilla ei ole esimerkiksi ASCII-koodia. Jos napilla on näkyvä ASCII-koodi eli näkyvä merkki, niin napin näppäinkoodi ei ole välttämättä sama tämän ASCIIkoodin kanssa. Modifiers-ominaisuus kertoo sen, mikä CTRL, SHIFT ja ALT nappien yhdistelmä on alas painettuna. KeyData-ominaisuus pitää sisällään KeyCode ja Modifiers ominaisuksien informaatioiden kombinaation eli näppäinkoodin ja tiedon siitä, mikä CTRL, SHIFT ja ALT näppäimien kombinaatio on alas painettuna. KeyValue-ominaisuus palauttaa saman informaation, kuin KeyData, mutta tekee sen kokonaislukumuodossa (int). Handled-ominaisuuden avulla voidaan estää näppäineventin välittäminen eteenpäin eli voidaan kertoa se, että tapahtuma on jo käsitelty. Tämän avulla voidaan estää esimerkiksi joidenkin merkkien syöttäminen johonkin tekstiä vastaanottavaan kontrolliin. SuppressKeyPress-ominaisuuden avulla voidaan määrittää välitetäänkö kyseinen tapahtuma kontrollille vai ei. KeyCharominaisuus palauttaa painetun napin Unicode-merkin (16-bittinen) ja sillä voidaan myös suorittaa merkkien asetus. Tämän ominaisuuden avulla voitaisiin esimerkiksi www.stickmansoft.com 73

muuttaa pienet kirjaimet isoiksi kirjaimiksi ennen kontrolliin tulostamista. Seuraavat merkit voidaan lukea ja asettaa. o a-z, A-Z o CTRL o ENTER o Pilkut, välimerkit ja pisteet. o Numerot EventArgs-parametrien käyttö Näppäimistön eventtien tapahtumankäsittelijöiden EventArgs-tyyppisten parametrien hyödyntäminen tapahtumankäsittelijöissä on suhteellisen yksinkertaista. Näppäinten painalluksien tunnistamisen kannalta keskeinen tietorakenne on Keys. Keystietorakenne sisältää kaikkien näppäimistön nappien tunnukset. Kuvassa 5-5 on esitetty Keys-tietorakenne. Kuva 5-5. Keys-tietorakenne. Keys-tietorakenteen avulla voidaan tutkia esimerkiksi mitä nappia on painettu. Esimerkiksi, KeyDown-eventin tapahtumankäsittelijässä voitaisiin seuraavalla tavalla tutkia onko a nappia painettu. if (e.keycode == Keys.A) // Button A pressed. KeyPress-eventin tapahtumankäsittelijässä voitaisiin tulostaa painetun napin Unicodekoodi (Jos napilla on Unicode-koodi.) näytölle KeyChar-ominaisuuden avulla esimerkiksi seuraavalla tavalla. 74 C# Windows-ohjelmointi

CreateGraphics().DrawString(e.KeyChar.ToString(), new Font("Arial", 25), Brushes.Black, 10.0f, 50.0f); Näppäimistön ALT, CTRL ja SHIFT nappien tilainformaation eli se onko kyseinen nappi alas painettuna vai ei saa selville myös muualla ohjelmakoodissa, kuin pelkästään näppäimistön eventtien tapahtumankäsittelijöissä. Tätä varten Control-luokassa on staattinen ModifierKeys-ominaisuus. Seuraavassa on joitakin käyttöesimerkkejä edellä mainittujen nappien tilan selvittämiseksi. Keys keysmod = Control.ModifierKeys; if (keysmod == (Keys.Shift Keys.Control)) // SHIFT and CTRL are pressed. else if (keysmod == Keys.Shift) // SHIFT button pressed. else if (keysmod == Keys.Control) // CTRL button pressed. 5.1.1 WinKeyboard-ohjelma WinKeyboard-ohjelma on esimerkki näppäimistön eventtien käytöstä. Ohjelmassa näppäimistön eventtien tapahtumankäsittelijöissä hyödynnetään EventArgs-parametrin mukana kulkevaa KeyCode ja KeyChar ominaisuuksia. Ohjelmassa tulostetaan näytölle painetun napin näppäin- ja merkki-informaatiota eli painetun napin näppäinkoodi, Unicode-merkki ja tämän numeroarvo sekä näppäinkoodi merkkimuodossa (Esimerkiksi, jos on painettu nappia F12, niin merkkikoodi on F12.). Ohjelma koostuu Program.cs-tiedostosta ja pääformista sekä tähän liittyvästä WinForm.cslähdetekstitiedostosta. Seuraavassa on esitelty edellä mainittujen lähdetekstitiedostojen sisältämät ohjelmakoodit. Program.cs Program.cs-lähdetekstitiedosto sisältää Main()-metodin eli ohjelman aloituskohdan. Kuvassa 5-6 on esitetty Program.cs-tiedoston ohjelmakoodi. /* */ Program.cs Copyright Markku Rahikainen. www.stickmansoft.com www.stickmansoft.com 75

using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace WinFrame static class Program static void Main() Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new WinForm()); WinForm.cs Kuva 5-6. WinKeyboard-ohjelman Program.cs-tiedosto. WinForm.cs-lähdetekstitiedosto on ohjelman pääformiin liitetty lähdetekstitiedosto. Tiedosto sisältää ohjelmakoodit WinKeyboard-ohjelman toimintojen toteuttamista varten. Kuvassa 5-7 on esitetty WinForm.cs-tiedoston ohjelmakoodi. /* WinForm.cs Copyright Markku Rahikainen. www.stickmansoft.com */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; namespace WinFrame public partial class WinForm : Form public WinForm() InitializeComponent(); 76 C# Windows-ohjelmointi

private void WinMenuFileExit_Click(object sender, EventArgs e) Application.Exit(); private void WinForm_PreviewKeyDown( object sender, PreviewKeyDownEventArgs e) KeyDownStatusLabel.Text = ""; KeyPressStatusLabel.Text = ""; KeyPressCharacterLabel.Text = ""; KeyUpStatusLabel.Text = ""; private void WinForm_KeyDown(object sender, KeyEventArgs e) KeyDownStatusLabel.Text = ((int)e.keycode).tostring(); KeyDownStatusLabel.Update(); Thread.Sleep(2000); private void WinForm_KeyPress( object sender, KeyPressEventArgs e) KeyPressStatusLabel.Text = ((int)e.keychar).tostring(); KeyPressCharacterLabel.Text = e.keychar.tostring(); KeyPressStatusLabel.Update(); KeyPressCharacterLabel.Update(); Thread.Sleep(2000); private void WinForm_KeyUp(object sender, KeyEventArgs e) KeyUpStatusLabel.Text = e.keycode.tostring(); Kuva 5-7. WinKeyboard-ohjelman WinForms.cs-tiedosto. www.stickmansoft.com 77

Kun WinKeyboard-projektin toteuttaa, suorittaa ohjelman kääntämisen ja käynnistää ohjelman, niin näyttö on kuvan 5-8 mukainen. Kuva 5-8. WinKeyboard-ohjelman tulostus. 78 C# Windows-ohjelmointi