Programmering af dialog/form
Der er jo ikke meget fidus ved sådan en dialog uden noget kode, der kan håndtere det brugerne skriver i formen og måske også gøre lidt når formen åbner.
Der er 3 ting vi skal have kigget på
- Initialisering (ting der skal gøres når formen åbnes)
- Validering (så, vi med det samme kan give brugeren feedback, hvis der skrives noget vrøvl)
- Afslutning (aflevering af data fra formen i regnearket)
Initialisering
For at få fat i de hændelser der er knyttet til en dialog skal man først sørge for at det er dialogen, der er markeret. Dernæst ud til højre i Visual Studio i Properties vinduet og klikke på lynet. Man kan så se alle de hændelser, der er knyttet til selve dialogen.
Den vi skal have fat i her hedder Load. Dobbeltklik i det hvide felt for at komme ind til koden bag.

Så skal du gerne få en tom Load hændelse:
private void Salgsform_Load(object sender, EventArgs e)
{
}
Og du kan kaste dig over programmeringen:
private void Salgsform_Load(object sender, EventArgs e)
{
Saelger.Items.Add("Vælg sælger");
Saelger.Items.Add("Thor");
Saelger.Items.Add("Jens");
Saelger.Items.Add("Peter");
Saelger.SelectedIndex = 0;
Produktgruppe.Items.Add("Vælg produktgruppe");
Produktgruppe.Items.Add("PC");
Produktgruppe.Items.Add("Skærm");
Produktgruppe.Items.Add("Bærbar");
Produktgruppe.SelectedIndex = 0;
FakturaNummer.Text = "Skriv fakturanummer";
StkPris.Text = "0";
Antal.Text = "1";
Post.Checked = true;
}
Jeg håber ikke ovenstående indeholder den store overraskelse - vi tilføjer elementer til de to combobokse og angiver, at det første element skal være valgt.
Dernæst sætter vi tekst på Fakturanummer, StkPris og Antal boksene. Og endelig sørger vi for at Post knappen er trykket ind.
Der er helt sikkert en masse andet du også kunne tænke dig at gøre - f.eks. at hente sælgere eller produktgrupper fra lister i regnearket - men det må lige vente lidt. Vi kommer tilbage til det senere i kurset.
Validering
Lad os se på, hvordan vi får sikret, at brugeren faktisk skriver et tal i f.eks. StkPris feltet. Vi skal igen have fat i hændelserne i properties vinduet.
Sørg for at StkPris tekstboksen er markeret og klik på lynet ude i Properties vinduet ude til højre:

Og som du ser er der en Validating hændelse, der kaldes når indholdet i tekstboksen er klar til at blive valideret.
Dobbeltklik i det hvide felt, så du kommer ind til hændelseskoden:
private void StkPris_Validating(object sender, CancelEventArgs e)
{
}
Og vi kan skrive vores kode. Den kan se sådan her ud:
private void StkPris_Validating(object sender, CancelEventArgs e)
{
float pris;
if (!float.TryParse(StkPris.Text, out pris))
{
MessageBox.Show("Du må meget gerne skrive et tal");
e.Cancel = true;
}
}
Det er måske ikke helt simpelt at forstå. Lad os tage det linje for linje.
- Vi laver en variabel, som vi kalder pris med datatypen float (et kommatal)
- TryParse prøver at konvertere den tekst, der står i StkPris.Text. Med out pris fortæller vi, at hvis det går godt vil vi gerne have tallet ud i vores variabel. Selve TryParse returnerer true eller false afhængig af om det er gået godt eller skidt. Det betyder at !float.TryParse er sand, hvis det er gået galt og ellers falsk. Altså, vi kommer kun ind i if sætningen, hvis det er gået galt.
- Og, hvis det er gået galt viser vi en beskedboks til brugeren
- Og med e.Cancel = true fortæller vi, at brugeren skal "blive" i tekstboksen. e kommer med som parameter til proceduren.
Håber det nu giver lidt mere mening :)
Afslutning
Nu mangler vi "bare" at skrive lidt kode til de to knapper.
Den første er simpel - har skal vi "bare" lukke dialogen uden at gøre mere. Dobbelklik på knappen for at komme ind til koden og der kan du så skrive
private void Fortryd_Click(object sender, EventArgs e)
{
this.Close();
}
this er en reference til formen selv - svarende til Me i VBA.
Opret knappen er lidt mere kompliceret og afhængerer naturligvis af, hvad informationerne skal bruges til.
Vi har sådan set allerede set, hvordan man skriver informationer ud i regnearket, så vi gøre "bare" på samme måde. Start med at dobbeltklikke på knappen for at komme ind til koden. Og der kan du så skrive:
private void Opret_Click(object sender, EventArgs e)
{
Excel.Worksheet wks =
(Excel.Worksheet)Globals.ThisWorkbook.ActiveSheet;
wks.Range["A1"].Value2 = FakturaNummer.Text;
wks.Range["B1"].Value2 = Dato.Value;
wks.Range["C1"].Value2 = Saelger.Text;
wks.Range["D1"].Value2 = Produktgruppe.Text;
wks.Range["E1"].Value2 = StkPris.Text;
wks.Range["F1"].Value2 = Antal.Text;
if (Faktureret.Checked)
wks.Range["G1"].Value2 = "Faktueret";
else
wks.Range["G1"].Value2 = "Ikke faktuereret";
if (Post.Checked)
wks.Range["H1"].Value2 = "Leveret med post";
if (Bud.Checked)
wks.Range["H1"].Value2 = "Leveret med bud";
this.Close();
}
Åh jo, og naturligvis også
using Excel = Microsoft.Office.Interop.Excel;
I toppen af koden, så du har adgang til Excel objektsamlingen.
Og igen, er der helt sikkert 1.000 andre ting du også godt kunne tænke dig at gøre med informationerne - f.eks. levere dem i bunden af en tabel mv.
Det skal vi nok komme tilbage til - vi skal lige lære lidt mere Excel C# kode først.