Programmering A – C# VT 2010 Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010‐02‐08
2
Innehåll Hjälp och referenser ................................................................................................................................ 3
Kap 1 – Introduktion ................................................................................................................................ 3
Steg‐för‐steg ........................................................................................................................................ 3
Kapitel 2 ‐ Variabler ................................................................................................................................. 8
Att göra .............................................................................................................................................. 10
Kapitel 3 – IF‐satsen .............................................................................................................................. 11
Att Göra ............................................................................................................................................. 13
Kap 3.5 – IF‐satser och färger ................................................................................................................ 14
Att göra .............................................................................................................................................. 14
Kap 4 – Slumptal .................................................................................................................................... 16
Att göra .............................................................................................................................................. 18
Kap5 – Timer .......................................................................................................................................... 19
Att göra: ............................................................................................................................................. 22
Kapitel 6 – Picturebox ............................................................................................................................ 23
Att göra .............................................................................................................................................. 24
3
Hjälp och referenser http://csharpskolan.se/index.php (Site på svenska om C#)
http://www.java2s.com (Tutorials till allt från C till Microsoft Word)
http://iwtjanster.idg.se/webbstudio/ (Onlinetutorials i SQL, JAva, C# och mycket mer. På svenska)
Kap 1 – Introduktion Ladda ner Sharpdevelop 3.1 från http://icsharpcode.com/OpenSource/SD/Download/ och installera det på din dator.
Gå till Fronter och ladda ner programmet P1HelloWorld.exe. Det ligger i mappen ”Övningar” i rumment ”Åk 1”. Gör ett program som gör samma sak som P1HelloWorld.exe.
Stegförsteg 1. Skapa en ”New solution”
4
2. Markera ”Windows Application” och döp ditt program till något, exempelvis Program1. Använd helst inte svenska tecken.
5
3. Lägg märke till de tre markerade delarna. ‐ Till vänster välj ”Windows Forms” ‐ I mitten hoppar man mellan designläge och kodläge ‐ Till höger finns alla egenskaper och attribut för det markerade objektet (detta fall själva fönstret)
6
4. Till vänster under ”Toolbox” finns en mängd olika komponenter som vi kan använda genom ”dra och släpp” till vårt program. Dra en knapp (button), en textfält (label) och en textruta (textbox) till ditt program. Programmet kommer automatiskt att döpa dessa till button1, label1 och textbox1. Detta går att ändra genom att markera objektet och ändra ”name” under egenskaperna (properties) till höger.
7
5. Nu vill vi att saker ska hända när vi trycker på knappen. Vi vill att det som står i textrutan (textbox1) ska skrivas in i textfältet (label1). Vi vill också att texten som står på knappen ska ändras. Alla tre objekt som vi har skapat har ett attribut som heter ”Text”. Detta attribut är det som står på knappen, i textfältet eller i textrutan. Dubbelklicka på knappen, då hoppar programmet till kodläget och den skapar automatiskt en funktion som heter Button1Click (). Det som vi skriver mellan måsvingarna {} kommer
att hända när vi trycker på knappen. Koden nedan gör två saker: ‐ Ändrar texten på knappen till ”Knapp”. ‐ Ändrar texten i label1 till det som står i textbox1.
Kör ditt program (tryck på F5) och kontrollera så att det fungerar som det är tänkt.
8
Kapitel 2 Variabler
En variabel i programmering kan ses som en låda där vi sparar ner något som vi ska använda senare i programmet. Det finns olika typer av variabler beroende på vad vi ska spara i dem. Vi ska börja med att titta på en int. En int är en variabel där vi sparar ett heltal, t.ex 14, 3004 eller ‐45. Först börjar vi med att deklarera (skapa) variablen.
int a;
Nu har vi skapat låda som heter a och i den kan vi stoppa ett heltal för att det är en int. Än så länge finns ingenting i lådan, den är helt tom. Vi kan när som helst stoppa in något i lådan, det enda vi måste tänka på är att vi bara kan stoppa in heltal.
a = 42;
Nu har vi stoppat in talet 42 i lådan. Vi skapar ett par variabler till
int b; int c;
Vi har skapat två variabler till som vi döpt till b och c. Vi stoppar in (det kallas tilldela) talet 10 i variablen b;
b = 10;
Eftersom båda variablerna a och b är tal (int) kan vi räkna med dem. Vi tar och summerar dem och
stoppar in svaret i variabeln c
c = a + b;
Nu innehåller variabeln c talet 52 (42+10).
Variabelnamn Innehåller int Heltal, ‐2miljarder till 2miljarderlong Heltal, väldigt stora taldouble Decimaltal char Ett tecken string Textsträngarbool True eller false
9
Vi gör ett litet program som kan summera två tal. Skapa ett program som ser ut ungefär så här:
I rutorna ska vi skriva in två tal. När vi trycker på knappen ska dessa tal summeras och svaret ska skrivas ut i label1. Dubbelklicka på kappen för att få fram funktionen som körs när vi trycker på knappen. Vi vill nu skapa tre stycken variabler av typen int. I den första ska vi spara det som står I
textBox1, i den andra ska vi spara det som står i texBox2. I den tredje sparar vi summan av de två första. Jag döper mina variabler till i1, i2 och summa
.
Nu är variablerna skapade och nästa steg är att stoppa in talen som står i rutorna. Här kommer ett problem, det som står i rutorna är ju text och inte tal så vi måste konvertera (göra om) det som står i textrutor till tal. Så, vi vill göra om det som står i textrutorna till tal och stoppa in i våra variabler. Det går till på följande sätt;
void Button1Click(object sender, EventArgs e) {
int i1; int i2; int summa; }
i1 = Convert.ToInt32(textBox1.Text); i2 = Convert.ToInt32(textBox2.Text);
10
Nu summerar vi dessa två tal och sparar i variabeln summa
Slutligen vill vi skriva in svaret vi fick i vår label1. Men, i en label står det text, inte tal, så vi måste göra om vårt tal till text innan vi stoppar in det. Det fungerar på nästan samma sätt som åt andra hållet.
Nu ska det fungera. Hämta gärna hem exempel2.exe från fronter om du vill titta hur det ser ut. Gör nu ett eget program som fungerar på samma sätt.
Att göra Hämta hem program P2Räknaren.exe från Fonter. Gör ett eget program som fungerar på samma sätt.
Variabelnamn Innehåller
int Heltal, ‐2miljarder till 2miljarder
long Heltal, väldigt stora tal
double Decimaltal
char Ett tecken
string Textsträngar
bool True eller false
summa = i1+i2;
label1.Text = Convert.ToString(summa);
11
Kapitel 3 – IFsatsen
Ibland vill man att vissa saker ska hända bara om något annat villkor är uppfyllt. Då används If‐satser.
Generellt ser IF‐satsen ut så här:
if (Något är sant) { Gör detta!; } else if (Något annat är sant) { Gör detta!; } //(Här kan det komma flera else if) else { I alla andra fall, gör detta!;
12
Vi gör ett litet program för att demonstrera.
• Två stycken textbox där vi ska skriva in tal.
• En knapp.
• En label där vi ska skriva ut ett par saker.
När man ska trycker på knappen följande hända:
• Om talet i textbox1 är större än det i textbox2 skriver den i label1: [Första talet] är större än [Andra talet]. Det är värdena av [Första talet] och [Andra talet] som ska skrivas ut, t.ex. 17, 10 eller vad det nu är.
• Om talet i ruta B är större än det i ruta A skriver den i label1: [Andra talet] är större än [Första talet].
• Om talen är lika ska den skriva ut: [Första talet] och [Andra talet] är lika stora.
13
Den gröna texten är kommentarer som programmet inte kommer att bry sig om. Man använder kommentarer för att förklara vad kod gör till andra som läser den eller för att man själv ska komma ihåg det senare.
Att Göra Programmet heter exempel3.exe och ligger på Fronter. När ni gjort och förstått det kan ni ladda hem och göra P3MyndigKollen.exe.
void Button1Click(object sender, EventArgs e) { //Skapa två variabler int a; int b; //Gör om det som står i textrutorna till int //och stoppa in i a och b a = Convert.ToInt32(textBox1.Text); b = Convert.ToInt32(textBox2.Text); //Om a är större än b… if (a > b) { //Gör detta label1̣Text = a + " är större än " + b; } //Annars b är större än a… else if (b > a) { //Gör detta label1̣Text = b + " är större än " + a; } //I alla andra fall än ovan… else { //Gör detta label1̣Text = a + " och " + b + " är lika stora"; } }
14
Kap 3.5 – IFsatser och färger För att få lite personlig prägel på sitt program ska vi titta på hur man kan ändra färger.
Vi gör en enkel design med en knapp och en label och en groupbox med två stycken radiobuttons. När vi trycker på knappen ska färgen på bakgrunden, knappen och texten ändras till rött eller grönt beroende på vad man har valt.
Att göra Gör samma exempel som ovan. Programmet finns att ladda ner från Fronter som exempel3.5.exe. Ladda sedan ner oh gör ett program som fungerar som P3.5FärgVäljaren.exe.
Variabelnamn Innehåller
Int Heltal, ‐2miljarder till 2miljarder
Long Heltal, väldigt stora tal
Double Decimaltal
Char Ett tecken
String Textsträngar
Bool True eller false
15
exempel3.5.exe
void Button1Click(object sender, EventArgs e) { //Om radioButton1 är markerad (notera att det är två stycken “=” if (radioButton1.Checked == true) {
//Detta ändrar bakgrundsfärgen på knappen button1.BackColor = Color.Red; //Detta ändra texten på knappen button1.ForeColor = Color.Green; //Detta ändra bakgrundsfärgen på programmet
this.BackColor = Color.Red; //Detta ändrar textfärgen på radiobuttons
radioButton1.ForeColor = Color.Green; radioButton2.ForeColor = Color.Green; //Detta ändrar färgen på textet i label1. label1.ForeColor = Color.Green; } //Annars om den andra radiobutton2 är markerad ska följande hända else if (radioButton2.Checked == true) { button1.BackColor = Color.Green; button1.ForeColor = Color.Red; this.BackColor = Color.Green; radioButton1.ForeColor = Color.Red; radioButton2.ForeColor = Color.Red; label1.ForeColor = Color.Red; } }
16
Kap 4 – Slumptal Ofta i programmering vill man ta fram slumptal for olika ändamål. Vad vi måste göra är att skapa ett objekt som vi kan använda för att ta fram slumptal i programmet. Koden för detta är ganska enkel:
I fallet ovan har vi skapat ett objekt av typen Random och vi har döpt vår till myRandom. En skillnad från innan är att vi skapar objektet utanför knappfunktionen. Det innebär att alla funktioner kommer att kunna använda sig av samma objekt och vi behöver inte skapa nya. Mer om det senare. Titta på koden nedan som visar var ni ska skriva in det någonstans. Det är i MainForm.cs.
För att nu skapa ett tal skapar vi först en variabel av typen int, sedan använder vi den myRandom som vi skapat tidigare för att ta fram ett slumptal. Denna kod skriver vi där vi vill att den ska hända, till exempel när vi trycker på knappen
Talen 1 och 5 bestämmer mellan vilka tal vi vill att slumptalet ska vara. Vi kommer att kunna få 1, 2 ,3 eller 4 som slumptal med dessa värden.
Random myRandom = new Random();
public partial class MainForm : Form { //Här skapar vi vår random Random myRandom = new Random(); public MainForm() {
int islumptal; islumptal = myRandom.Next(1, 5);
17
Nu skapar vi en enkel design som innehåller
2 textBox 1 button 3 label
Som ni ser har jag gjort storleken på den label där talet ska skrivas ut större. Ni får gärna ändra färger, bakgrunder o.s.v. på alla delar i programmet.
När man trycker på knappen ska det skrivas in ett tal i label1 som är mellan det som står i Min‐rutan och det som står i Max‐rutan.
18
exempel4.exe
Att göra Efter ni har gjort exempel4.exe (ovan) laddar ni hem P4Random.exe från fronter och gör ett sådant program. Ge programmet en personlig prägel med färger och bakgrunder ☺
[…] public partial class MainForm : Form
{ //Här skapar vi vårt objekt //och döper det till myRandom
Random myRandom = new Random(); public MainForm() […] void Button1Click(object sender, EventArgs e) { //Skapa först 3 variabler som är int (heltal) int imin; int imax; int islumptal; //Ta det som står i textBox1, //gör om det till Int32 och spara i variabeln imin imin = Convert.ToInt32(textBox1.Text); //Gör samma sak med det som står i textBox2 //och stoppa in i imax imax = Convert.ToInt32(textBox2.Text); //Använd myRandom för att ta fram ett värde //mellan imin och imax och spara detta tal i islumptal islumptal = myRandom.Next(imin, imax); //Ändra talet till string (vanlig text) //och skriv ut i label1 label1.Text = Convert.ToString(islumptal); }
19
Kap5 – Timer En timer är en slags räknare som tickar med bestämda intervall. Vi kan bestämma vad som ska hända varje tick. Vi kan också bestämma hur ofta den ska ticka.
Vi skapar en timer genom att dra den till vårt program, den ligger under tools. Den får som standard
namnet timer1.
Vi kan nu göra olika saker med denna timer, vi koncentrerar oss på de vanligaste:
//För att starta timer1 timer1.Start();
//För att stoppa timer1 timer1.Stop();
//För att ändra intervallet på timertick (1000 = 1000ms = 1sekund) timer1.Interval = 1000;
20
Vi gör ett litet program för att demonstrera, skapa ett GUI som ser ut såhär:
Den består av följande objekt
• Två knappar
• En label
• En timer
Markerar vi timern så ser vi vilka egenskaper vi kan sätta på den.
Enabled : Om den ska vara startad Interval : Hur ofta den ska ticka (i millisekunder)
• När trycker på start, startar timern.
21
• När vi trycker på stop, stoppar timern.
• För varje tick (som ska ske en gång varje sekund), ska en variabel ökas med ett och skrivas ut i label1.
exempel5.exe
[...] public partial class MainForm : Form { //Skapa en räknare som vi använder senare i //programmet. Notera var den skapas int icounter = 0; public MainForm()
[...]
void Button1Click(object sender, EventArgs e) { //När vi klickar på startknappen startas timer1 timer1.Start(); }
void Button2Click(object sender, EventArgs e) { //När vi klickar på stoppknappen stoppas timer1 timer1.Stop(); } void Timer1Tick(object sender, EventArgs e) { //Varje gång timern tickar ska: //Räknaren ökas med ett icounter = icounter + 1; //Räknarens värde skrivs ut i label1 label1.Text = Convert.ToString(icounter); }
22
Att göra: Ladda ner och gör exempel 5.exe.
Sedan finns det två program:
• P5Clicker_G.exe
• P5Clicker_VG_MVG
Gör först P5Clicker_G.exe om du hinner gör P5Clicker_VG_MVG.exe
Tips/hjälp:
Om ni fastnar skriv ner svar på följande frågor, ta med eventuella ”om” när ni svara. Exempelvis ”Variablen A ska öka med ett om B är sant”.
• Vilka variabler behövs?
• Vad ska hända när vi trycker på knappen/knapparna?
• Vad ska hända vid varje timertick?
23
Kapitel 6 – Picturebox Det finns några olika sätt för att visa bilder i en picturebox. Vi ska gå igenom hur man gör genom att hänvisa till en bild på datorn. Koden är ganska enkel och ser ut så här:
Till exempel:
Nu ska vi göra ett litet enkelt tärningsspel. Istället för att visa en siffra ska vi visa en bild på tärningen. Desigen blir en knapp och en picturebox
Steg för steg för programmet:
• Skapa ett Random objekt enligt tidigare kapitel
• När vi trycker på knappen ska: o Ett slumptal mellan 1 och 6 tas fram o Om det är en etta, visa bilden på tärning 1 o Om det ör en tvåa, visa bilden på tärning 2 o […fall 3‐5…] o Om det är en sexa, visa bilden på tärning 6 o Om det är något annat, visa en messagebox. Detta är ren kontroll.
pictureBox1.Image = Image.FromFile(@"SÖKVÄG_TILL_FILEN");
pictureBox1.Image = Image.FromFile(@"c:\pics\image1.jpeg");
24
exempel6.exe
Koden ovan fungerar och är korrekt. De flesta borde förstå den också. Men, det finns ett lite smidigare sätt att lösa det om man tänker efter. Eftersom sökvägen är en string kan vi bygga ihop den själva:
Att göra OBS! Exemplen ovan utgår från att det finns en katalog som heter dice som ligger i samma mapp som exempel6.exe. I denna dice‐katalog ligger bilderna 1.jpeg‐6.jpeg. Ni kan naturligtvis skriva hela sökvägen till filen om ni vill det. Efter det så gör ett program som fungerar som P6DiceGame.exe.
void Button1Click(object sender, EventArgs e) { int iRandom = myRandom.Next(1,7); if (iRandom == 1){
pictureBox1.Image = Image.FromFile(@"dice\1̣jpeg "); } else if (iRandom == 2){
pictureBox1.Image = Image.FromFile(@"dice\2̣jpeg "); } else if (iRandom == 3){
pictureBox1.Image = Image.FromFile(@"dice\3̣jpeg"); } else if (iRandom == 4){ pictureBox1.Image = Image.FromFile(@"dice\4̣jpeg "); } else if (iRandom == 5){
pictureBox1.Image = Image.FromFile(@"dice\5̣jpeg "); } else if (iRandom == 6){
pictureBox1.Image = Image.FromFile(@"dice\6̣jpeg"); } else{ MessageBox.Show("Ops, iRandom = " + iRandom); } }
pictureBox1.Image = Image.FromFile(@"dice\" + iRandom + "̣jpeg ");