Introduktion til C#
Som sagt er dette ikke et kursus i C#, men lad os alligevel se på de mest almindelige konstruktioner.
Nedenstående er mest tænkt som et opslagsværk, som du kan vende tilbage til, hvis du skulle blive i tvivl om ét eller andet.
Procedure
En procedure i C# ser sådan her ud:
private void HelloWorld()
{
Excel.Worksheet wks =
(Excel.Worksheet)Globals.ThisWorkbook.ActiveSheet;
wks.Range["A1"].Value = "Hello World";
}
Inden vi går videre skal vi lige se på ovenstående. Bemærk følgende
- Alle linjer slutter med ; (det er vigtigt)
- Vi bruger {} til at markere, hvad der hænger sammen.
- Vi bruger [] når vi har fat i et indeks (i VBA bruger man () både i forbindelse med indeks og funktionskald, men i C# er de to typer adskilt)
- void angiver at der ikke er nogen returværdi fra proceduren
- private angiver at den kun kan bruges lokalt. Man kan også skrive public, hvis det skal bruges flere steder.
- Man kan lave linjeskift (næsten) som man har lyst - det er ; der markerer at linjen er slut.
- (Excel.Worksheet) er det vi kalder en typecast, det markerer at det efterfølgende skal konverteres til typen Excel.Worksheet).
Funktion
Og en funktion:
private string ToGangeTekst(string indTekst)
{
return indTekst + " " + indTekst;
}
Og et eksempel på, hvordan man kan kalde sådan en funktion.
wks.Range["A1"].Value = ToGangeTekst("Hello World");
Bemærk følgende:
- En funktion er magen til en procedure - bortset fra at vi skriver den datatype, der skal returneres i stedet for void og med return angiver, hvad der skal sendes retur
- Tekster sættes sammen med + (i modsætning til &, som du måske kender fra VBA).
- Man skriver altid datatype før variabel.
Variable
Som nævnt ovenfor skriver man altid datatype før variabelnavn, så deklaration af variable ser sådan her ud:
string enTekst = "Hello World";
int etHeltal;
bool SandFalsk = true;
Excel.Worksheet wks =
(Excel.Worksheet)Globals.ThisWorkbook.ActiveSheet;
Bemærk:
- Man kan deklarere en variabel og give den indhold med det samme (det er dejligt)
- Man behøver ikke "Set" når man deklarerer et objekt (som man skal i VBA)
Betingelser
int etHeltal = 4;
if (etHeltal == 3)
{
wks.Range["A1"].Value = "JA - tallet er 3";
}
else
{
wks.Range["A1"].Value = "Nej - tallet er ikke 3";
}
Bemærk:
- Der skal være paranteser omkring betingelsen
- Vi bruger == når vi skal sammenligne og != når vi gerne vil teste for om ting er forskellige (! betyder NOT i C#)
- Igen bruger vi {} til at markere, hvad der hænger sammen (i ovenstående ekstempel er de faktisk ikke nødvendige, da der kun er én linje i hver blok, men det er god stil at sætte dem på alligevel).
Vi har også And og Or i C#, her er det er bare & og | - og sætter man to efter hinanden bliver de efterfølgende ting kun evalueret, hvis det er nødvendigt - så vi skriver næsten altid && og ||.
Man kan naturligvis også:
switch (etHeltal)
{
case 0:
wks.Range["A1"].Value = "JA - tallet er 0";
break;
case 1: case 2: case 3: case 4: case 5:
wks.Range["A1"].Value = "Tallet er mellem 1 og 5";
break;
case 6:
wks.Range["A1"].Value = "Tallet er 6";
break;
default:
wks.Range["A1"].Value = "Jeg kender ikke tallet";
break;
}
Svarende til Select Case fra VB.
Løkker
for (int i = 1; i <= 10; i++)
{
wks.Range["B" + i.ToString()].Value = i;
}
Bemærk:
- Første parameter angiver startværdien (og man skal angive datatypen her)
- Næste parameter angiver, hvor der skal sluttes (man kan godt f.eks. have et funktionskald her, hvis man skulle have lyst til det)
- Og til slut - hvordan der skal tælles op. i++ er det samme som i = i + 1 (det er smart)
Vi tager lige én mere:
int i = 1;
foreach (Excel.Worksheet loopwks in Globals.ThisWorkbook.Worksheets)
{
wks.Range["C" + i.ToString()].Value = loopwks.Name;
i++;
}
Simpel dialog
System.Windows.Forms.MessageBox.Show("Hej med dig","Overskift");
Og skriver man
using System.Windows.Forms;
I toppen af koden kan man nøjes med at skrive
MessageBox.Show("Hej med dig","Overskift");
Og vil man have svar retur kan man skrive:
DialogResult svar;
svar = MessageBox.Show("Hej med dig. Går det det godt?", "Overskift",
MessageBoxButtons.YesNo);
if (svar == DialogResult.Yes)
{
MessageBox.Show("SUPER!");
}
else
{
MessageBox.Show("ØV");
}
Der er desværre ingen InputBox i C#, så du må klare dig med dialoger/forms, som er det næste vi skal kigge på.
Kommentarer
I C# kan man lave kommenterer på to måder:
// Dette er en kommentar, der kun fylder en enkelt linje
/* Og en der fylder flere linjer
* en linje mere (* i starten er ikke nødvendig - bare god stil)
* Og endnu en
* Og slut */