Avatar billede morf4r Nybegynder
18. august 2006 - 18:39 Der er 55 kommentarer og
2 løsninger

Simpelt form spørgsmål

Hej
Hvis jeg har en form1 - og i denne form1 har jeg en knap som åbner form2. Når form2 så åbnes, så skal det ikke længere være muligt at trykke/anvende/whatever form1 før form2 igen er lukket.
Hvordan gøres dette?
Avatar billede nielle Nybegynder
18. august 2006 - 18:45 #1
Brug ShowDialog() i stedet for Show():
Avatar billede dr_chaos Nybegynder
18. august 2006 - 18:47 #2
eller lav din konstruktør til form2 på denne måde.

public Form form2 (Form form1)
{
form1.enabled=false;
}

når du laver en instans af form2 gør du det på denne måde:

form2 f = new form2(this);
f.Show;
Avatar billede morf4r Nybegynder
18. august 2006 - 18:49 #3
Okay nielle - ja det var sq meget simpelt =)

Lige et mere:

Hvordan lukker jeg både form1 og form2, hvis jeg lukker form2?
Avatar billede dr_chaos Nybegynder
18. august 2006 - 18:49 #4
Lavede lige en fejl.
I form 2 skal du så have en variabel som indeholder form1.
public form1 f1;
public Form form2 (Form form1)
{
f1=form1
f1.enabled=false;
}

på denne måde har du også adgang til evt felter på form1. f.eks. en textbox
Avatar billede morf4r Nybegynder
18. august 2006 - 18:56 #5
Tak for dit input chaos- dog er nielles svar lige det jeg søgte..

men nu vi er igang vil jeg da også gerne vide hvordan man nemt får adgang til form1 via. form2

skal jeg lave følgende:

public form1 (f1)
{
}

public Form form2 (Form form1)
{
f1 = form1
}

og så har jeg adgang til form1 textboxes osv?
Avatar billede nielle Nybegynder
18. august 2006 - 18:57 #6
Hvordan lukker jeg både form1 og form2, hvis jeg lukker form2?> Hvordan præcis ønsker du at lukke form2?
Avatar billede dr_chaos Nybegynder
18. august 2006 - 18:58 #7
hvis du bruger mit foreslag kan du kalde f1.dispose i dispose funktionen på form2.
Avatar billede dr_chaos Nybegynder
18. august 2006 - 19:04 #8
du skal lave
public class form1
{
public Form form1 ()
{
}
}


public class form2
{
public form1 f1;
public Form form2 (form1 form1)
{
f1=form1;
f1.TextBox1.Text="lalala";
}
}
Avatar billede nielle Nybegynder
18. august 2006 - 19:15 #9
Hvis det at "lukke form1 samtidigt med form2" faktisk er det samme som at afslutte programmet helt, så kan du altid gore dette ved at kalde:

Application.Exit();
Avatar billede morf4r Nybegynder
18. august 2006 - 19:39 #10
jeg har lavet en der hedder luk_program under "formclosing"

private void luk_program(object sender, FormClosingEventArgs e)
{
    if (MessageBox.Show("Afslut programmet?", "Afslut", MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes)
    {
          Application.Exit();
    }
}

det virker også fint nok, den spørger bare om jeg vil lukke programmet 2 gange istedet for bare 1.
Avatar billede nielle Nybegynder
18. august 2006 - 19:43 #11
Hvis jeg sætter en FormClosing på form2 med det viste indhold, bliver jeg kun spurgt en gang:

        private void Form2_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (MessageBox.Show("Afslut programmet?", "Afslut", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                Application.Exit();
            }
        }
Avatar billede nielle Nybegynder
18. august 2006 - 19:46 #12
Ahh, jeg kan se at jeg fik sat den på FormClosed i stedet for FormClosing - ja der får jeg den også to gange.

Men, altså kun en gang på FormClosed. Jeg må indrømme at jeg ikke helt kan se logikken i det.
Avatar billede morf4r Nybegynder
18. august 2006 - 19:48 #13
det var fordi jeg brugte "formclosing" modsat din "formclosed" - det virker også fint ved mig når jeg bruger "formclosed"

Kan du komme med en bedre forklaring af hvordan man får adgang til form1 via. form2 end den chaos kom med- jeg kan umiddelbart ikke få det til at virke.
Avatar billede nielle Nybegynder
18. august 2006 - 19:55 #14
Den som dr_chaos gav er den rigtige ... du skal lade form1 medsende sig selv til form2's constructor:

=== Form1===

namespace e727016
{
    public partial class Form1: Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2(this);
            form2.ShowDialog();
        }
    }
}

=== Form2 ===

namespace e727016
{
    public partial class Form2: Form
    {
        private Form1 form1;

        public Form2(Form1 form1)
        {
            this.form1 = form1;

            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("Afslut programmet?", "Afslut", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                Application.Exit();
            }
        }
    }
}
Avatar billede morf4r Nybegynder
18. august 2006 - 20:08 #15
tak for hjælpen nielle. Nu er der jo kommet lidt mere på det simple spørgsmål, så du kan sagtens få nogle flere point.

hvis du har tid har jeg dog lidt længere spørgsmål:

jeg leger med lidt lagerstatus simpelt program.. jeg har en listview hvor der står varenummer,producent,beskrivelse og pris.
når jeg så f.eks. siger at jeg vil købe 10 stk af varenummer 1, klikker jeg på varen i listviewet og indtaster antal stk.
Herefter vil jeg så have det over i en anden listview hvor jeg kan se hvad jeg har bestilt. Det kan jeg selvfølgelig bare gøre ved at adde det til en bestillingstabel i min database, men det er nok lidt dumt at have en bestillingstabel som er ubrugelig.
mit spørgsmål er så, om det ikke ville være lettere at smide informationen over i en arraylist og når man så har bestilt det man vil bestille- så kan man trykke bestil og komme videre i systemet.
Langt spørgsmål, og sikkert elendigt forklaret, men jeg er ny til C#, så leger bare lidt =)
Avatar billede nielle Nybegynder
18. august 2006 - 20:24 #16
Hvad mener du med "... en bestillingstabel som er ubrugelig"? I hvilken forstand er den ubrugelig? Bestillingen skal vel under alle omstændigheder gemmes i databasen på et eller andet tidspunkt.
Avatar billede morf4r Nybegynder
18. august 2006 - 20:52 #17
Ja, bestillingen skal gemmes, men det skal først gøres når man er kommet lidt videre i systemet, altså når man f.eks. har udfyldt navn adresse osv- hvad jeg lige finder på.. det jeg mener med at bestillingstabelen er ubrugelig er, at det kun er en "pre-bestilling", altså ligesom en indkøbskurv, hvor man kan tilføje og fjerne produkter man vil have. Fordi hvis jeg lavede en tabel med pre-bestilling, ville der jo måske havne hundredevis af ikke-færdigtgjorte bestillinger hvis folk besluttede at de ikke gad købe noget alligevel.
Avatar billede nielle Nybegynder
18. august 2006 - 21:55 #18
Der er intet i vejen med at lave en sådan tabel med præ-bestillinger. Man kan sagtens lave det sådan at der automatisk bliver ryddet op i denne me jævne mellemrum.

Mht. at genne i en ArrayList, så tror jeg nu nok at jeg hellere selv ville vælge at gemme den i en HashTable. Men det er bestemt også en mulig løsning.
Avatar billede morf4r Nybegynder
18. august 2006 - 22:13 #19
jeg har lavet det du skrev om form1 via. form2
men hvordan ændre jeg en textbox i form1 via form2 så?
Avatar billede morf4r Nybegynder
18. august 2006 - 22:15 #20
eller dvs, jeg prøvede at skrive form1.textboxosv, men der kom intet frem
jeg kan dog godt sige f.eks. form1.enabled = false;
Avatar billede morf4r Nybegynder
18. august 2006 - 22:16 #21
okay, jeg glemte at gøre den public, my bad =)
Avatar billede nielle Nybegynder
18. august 2006 - 22:49 #22
Public kan gøre det, men det er nok en smule mere korrekt at erklære den "internal".
Avatar billede morf4r Nybegynder
18. august 2006 - 22:59 #23
Tilbage til min "luk program" ting.
Det virker som sagt fint når jeg trykker "Ja", så lukker alle forms.
men når jeg trykker nej, lukker den bare form2 og man kan nu arbejde på form1, det var ikke helt meningen.
Avatar billede hmortensen Nybegynder
19. august 2006 - 02:44 #24
I din FormClosing event, behandler du dens event arg, hvis formen ikke skal lukke.
eArg.Cancel = true;
Avatar billede nielle Nybegynder
19. august 2006 - 07:18 #25
Hvis du svare "Nej", er det så meningen at fom2 alligevel ikke skal lukke, eller hvad?
Avatar billede morf4r Nybegynder
19. august 2006 - 20:06 #26
Ja, nielle, dette er meningen.
Avatar billede nielle Nybegynder
19. august 2006 - 21:49 #27
Jeg synes ikke at det er en helt elegant løsning, men dette virker da:

        private bool Form2_FormClosing_Double = false;
        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!Form2_FormClosing_Double && MessageBox.Show("Afslut programmet?", "Afslut", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                Form2_FormClosing_Double = true;
                Application.Exit();
            }
            else
                e.Cancel = !Form2_FormClosing_Double;
        }

- og den eliminere det at der kommer to MessageBox'e op.
Avatar billede hmortensen Nybegynder
20. august 2006 - 08:51 #28
Eller sådan her:

if (MessageBox.Show("Afslut programmet?", "Afslut", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
  Environment.Exit(0);
}
else
{
  e.Cancel = true;
}
Avatar billede morf4r Nybegynder
20. august 2006 - 13:16 #29
tak- det med Environment.Exit(0) virker.

Jeg har lige endnu et spørgsmål (sikkert simpelt for jer)

jeg har lavet en meget simpel login form..

string username = "test";
string password = "test";

if (textBox1.Text != username || textBox2.Text != password)
{
    MessageBox.Show("Fejl i
login","Fejl",MessageBoxButtons.OK,MessageBoxIcon.Error);
}

Jeg har prøvet at lege lidt med at lave en login tabel i min database, men her vil den kun tage nr.1 user og password.
En god ide?
Avatar billede morf4r Nybegynder
20. august 2006 - 13:18 #30
btw - hvorfor er det man skriver (0) efter exit ?
Avatar billede morf4r Nybegynder
20. august 2006 - 13:35 #31
og endnu et:

Hvis jeg tilføjer den samme vare 2 gange, så skal den ikke skrives to gange, men istedet skal antallet lægges sammen. How to?
Avatar billede hmortensen Nybegynder
20. august 2006 - 14:57 #32
0'et i Exit() beskriver om der var en fejl (exit code), hvor betyder der ingen fejl var.
Avatar billede nielle Nybegynder
20. august 2006 - 15:12 #33
20/08-2006 13:16:06> Hvordan ser din kode ud til at tjekke efter username og password i databasen?

20/08-2006 13:35:03> Det er lidt svært at svare på uden at vide noget mere. Hvordan tilføjer du en vare? Og hvor er det at du får den vist henne? Og hvordan gør du det?
Avatar billede morf4r Nybegynder
20. august 2006 - 16:44 #34
jeg tilføjer en vare på følgende måde (kom gerne med en lettere måde hvis jeg gør det på en håbløs måde):

            try
            {
                if (Convert.ToInt32(listView1.SelectedItems[0].SubItems[3].Text) >= Convert.ToInt32(textBox1.Text))
                {
                    string index = listView1.SelectedItems[0].SubItems[0].Text;
                    int prenummer = 1;
                    string varenummer = listView1.SelectedItems[0].SubItems[0].Text;
                    string producent = listView1.SelectedItems[0].SubItems[1].Text;
                    string varenavn = listView1.SelectedItems[0].SubItems[2].Text;
                    string pris = listView1.SelectedItems[0].SubItems[3].Text;
                    SqlConnection conn = new SqlConnection(connString);

                    string sql = String.Format("insert into preorder(sessionID,varenummer,producent,varenavn,pris,antal) values ({0},{1},'{2}','{3}',{4},{5})", prenummer, varenummer, producent, varenavn, pris, textBox1.Text) + String.Format("update vare set lagerstatus = (lagerstatus-{0}) where varenummer = {1}", textBox1.Text, index);

                    SqlCommand cmd = new SqlCommand(sql, conn);
                    conn.Open();

                    SqlDataReader reader = null;

                    try
                    {
                        reader = cmd.ExecuteReader();
                        reader.Read();

                        conn.Close();

                        MessageBox.Show("Vare tilføjet", "Tilføjet", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        richTextBox1.Clear();
                        textBox1.Clear();
                        UpdateListview();
                        UpdatePreOrder();

                    }
                    catch (Exception error)
                    {
                        MessageBox.Show(error.ToString());
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
                else
                {
                    MessageBox.Show("For stort antal valgt i forhold til lagerbeholdningen", "Fejl", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch
            {
                MessageBox.Show("Fejl", "Fejl", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }


Som du måske kan lure, så har jeg sat et "prenummer" til 1. Det har indtil videre været fordi jeg ikke har været istand til at finde noget jeg kunne bruge som et "fællesID"- altså lad os sige at jeg tilføjer 3 ting til min bestilling, og jeg så har en værdi i min database som bare tæller op.. så får disse 3 ting f.eks. værdien 3,4,5. Men når man så skal videre i systemet, så ved jeg ikke hvordan jeg kan sige, at den ikke skal sige at man har købt noget som har værdien 1,2 eller 3.
Derfor søger jeg et fællesID- men indtil videre har jeg bare sat det til 1, så alle ting man bestiller får "prenummeret" 1.

Men mht. det med at lægge antallet sammen, så skal det været noget i lignende: "hvis jeg tilføjer en vare i kurven som har et vareID som allerede er i kurven, så skal den ikke lægge varen i kurven, men istedet for bare opdatere den allerede eksisterende vares antal"

Beklager den lange forklaring, kunne ikke lige skrive det anderledes.
Avatar billede nielle Nybegynder
20. august 2006 - 16:49 #35
I stedet for bare at lave en INSERT med det samme, ville jeg forsøge mig med en SELECT ofr at finde udn af om der allerede var en (eller flere varer) af samme type i preorder.

1) Hvis der ikke var det, ville jeg lave INSERT'en, elles:
2) ville jeg lave en UPDATE i stedet for.
Avatar billede morf4r Nybegynder
20. august 2006 - 16:57 #36
hvordan ville sådan en select se ud?

altså hvis man vil undersøge om der f.eks. allerede var en vare med varenummer 2, kunne man jo bare skrive:

select varenummer from preorder where varenummer = 2

men hvordan fører man den så videre til at sige- hvis der er/ikke er, så skal den gøre blabla?
Avatar billede nielle Nybegynder
20. august 2006 - 17:04 #37
Noget i denne stil

"SELECT count(*) AS antal FROM preorder WHERE sessionID=" + prenummer + " AND varenummer=" + varenummer;

Så trækker du cærdien af "antal" of og hvis den er større en 0 så bruger du en UPDATE, ellers laver du en INSERT. Det klares med en almindelig if-sætning.
Avatar billede morf4r Nybegynder
20. august 2006 - 17:52 #38
Tak - det virkede. nu tæller den op hvis min vare allerede eksistere.

har du et forslag til hvordan jeg kan lave et ID for hver gang man bruger systemet?
f.eks. hvis bruger nr. 1 bestiller 4 ting- så vil disse 4 ting også komme frem når bruger nr. 2 bestiller fordi den bare indsætter i tabellen, og eftersom der ikke er et ID der kan skille bruger1 fra bruger2 får man bare det hele i hovedet.

jeg tænkte på en værdi der bare tæller op fra 1 til * når min form loader, men det er nok ikke skide holdbart =)
Avatar billede nielle Nybegynder
20. august 2006 - 18:31 #39
Hvordan holder du styr på dine brugere? Skal de logge ind eller noget for at bruge systemet?
Avatar billede morf4r Nybegynder
20. august 2006 - 19:29 #40
ikke lige pt. nej- det var det jeg gerne ville lave, altså et login system,men har slettet min kode til det- så indtil videre bruger jeg den primitive løsning i form af:

string username = "test";
string password = "test";

if (textBox1.Text != username || textBox2.Text != password)
{
    MessageBox.Show("Fejl i
login","Fejl",MessageBoxButtons.OK,MessageBoxIcon.Error);
}

Har du et forslag til et simpelt loginsystem med flere brugere?

Men stadigvæk, så ville en bruger jo godt kunne foretage flere bestillinger på samme dag, så hverken brugerid'et eller datoen ville være tilstrækkelig.
skal egentligt bare bruge et ID som kan adskille hver bestilling.
Avatar billede nielle Nybegynder
20. august 2006 - 19:34 #41
Dem som gerne vil logge ind skriver deres brugernavn og deres password. Dette leder du så efter i databasen med noget i denne stil:

"SELECT count(*) AS antal FROM brugerTabel WHERE username='" + username + "' AND password='" + password + "'"

Derefter tjekker du på antal. Hvis den er 1, er det en godkendt bruger og hun må logge ind. Hvis den derimod er 0 afvises brugeren (eller bliver i stedet tilbudt muligheden for at oprette sig som bruger).
Avatar billede morf4r Nybegynder
20. august 2006 - 22:07 #42
hehe, ja det sq så nemt når man lige ved det =)

har du et forslag til et ID der kan adskille hver bestilling?
Avatar billede nielle Nybegynder
20. august 2006 - 22:14 #43
Jeg vil foreslå at du trækker et id i forbindelse med at folk logger på.

Du kan f.eks. erklære en tabel hvor at du opretter en ny række ved hvert login. I den tabel skal der være et id-felt som automatisk tæller en op for hver ny række:

Du har ikke fortalt hvilken type database du bruger, så her er et par muligheder:

SQL Server (MS SQL) - Feltet erklæres til en Identity.
Access - Feltet erklæres til autonummer.
MySQL - Feltet erklæres til Auto_Increment.

Du bruger derefter dette id som dit "session-id".
Avatar billede morf4r Nybegynder
20. august 2006 - 22:48 #44
Jeg bruger MS SQL- og jeg har lavet en ny tabel hvor der er sessionID,tekst og tid.
og hver gang en bruger logger ind, laver den en ny række hvor den skriver hvem der er logged ind og på hvilket tidspunkt.
men hvordan selecter man det højeste nummer? (det nyeste login)
Avatar billede morf4r Nybegynder
20. august 2006 - 23:33 #45
jeg fandt:

select MAX(sessionID) as highest_number from login

men er det en okay måde at gøre det på?
Avatar billede nielle Nybegynder
21. august 2006 - 06:39 #46
Nej, den kan give dig problemer hvis der er to eller flere brugere som forsøger at logge på på samme tid. Der er også nogle problemstillinger onkring hvis du nogensinde skulle have lyst til at slette nogle af rækkerne i tabellen.

Prøv i stedet denne:

SELECT @@identity AS senestTrukneIdentity
Avatar billede morf4r Nybegynder
21. august 2006 - 14:40 #47
Jeg kan ikke umiddelbart få "SELECT @@identity AS senestTrukneIdentity" til at virke.
jeg har lavet det sådan, at når man står på login skærmen, står der i bunden "BrugerID: ikke logget på" - når man så er logget på står der "BrugerID: HøjesteID fra den anden tabel". Herfra bruger jeg bare den værdi når jeg skal bruge min preOrdreID.. Det kan nok laves smartere..

Desuden har jeg lavet lidt om på mit loginsystem da jeg ville vide om brugeren var admin eller ej (skal kunne tilføje varer osv)
det har jeg gjort sådan:

            string sql = "select username,password,status from brugere WHERE username='" + username + "' AND password='" + password + "'";

            try
            {
                reader = cmd.ExecuteReader();
                reader.Read();

                string bruger = reader["username"].ToString().Trim();
                string kodeord = reader["password"].ToString().Trim();
                int status = Convert.ToInt32(reader["status"].ToString().Trim());

                if (status == 1)
                {
                    Du er admin
                }
                if (status == 0)
                {
                    Du er ikke admin
                }
            catch
            {
                MessageBox.Show("Fejl i login", "Fejl", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
Avatar billede nielle Nybegynder
21. august 2006 - 18:20 #48
SELECT @@identity skal bruges umiddelbart efter at du har lavet en INSERT i den tabel hvor du opretter en post for hvert login. Altså

1) INSERT INTO ...
2) SELECT @@identity AS ...
Avatar billede morf4r Nybegynder
21. august 2006 - 18:23 #49
Jeg har et listview hvor jeg har varenummer,varenavn,pris.
Hvordan løber jeg listviewet igennem og får en "pris i alt"?

lad os sige

1  cola      50
2  fanta    50
3  sprite    50

så skal jeg have løbet det igennem og få den til at skrive 150 i et felt jeg vælger.
Avatar billede nielle Nybegynder
21. august 2006 - 19:02 #50
Jeg synes at du skal tage den i det andet spørgsmål du oprettede om det: http://www.eksperten.dk/spm/727456
Avatar billede morf4r Nybegynder
21. august 2006 - 20:50 #51
Yes, men da denne tråd heller ikke holder sig til mit første spørgsmål, og eftersom du tjekker denne tråd ofte og ved en del, kunne det jo være at du kunne svare på det også =)
Avatar billede nielle Nybegynder
21. august 2006 - 22:14 #52
1) Jeg synes at du skulle læse Ekspertens regler en gang til: Det er f.eks. ikke tilladt at stille det samme spørgsmål flere gange.

2) Hvis du tror at du bare kan blive ved med at stille nye spørgsmål her i dette spørgsmål, så tror jeg nok at du bliver skuffet. Det er sædvane at man godt lige kan stille et par ekstra spørgsmål, men alt inden for rimelighedens grænser...

Og før at vi nu breder os med flere spørgsmål, så synes jeg at vi under alle omstændigheder burde få bundet sløjfe rundt om de gamle først.
Avatar billede nielle Nybegynder
28. august 2006 - 12:49 #53
Hvad med noget respons?
Avatar billede morf4r Nybegynder
31. august 2006 - 10:16 #54
Hej igen nielle, beklager- jeg glemte det helt. Hvordan giver jeg dig nogle points? og hvordan modtager du flere end de 15.
Avatar billede nielle Nybegynder
31. august 2006 - 11:46 #55
Jeg skal først smide et svar før at du kan give point. Normalt venter jeg med at smide et svar til at den som spørger beder om det. Det er den eneste måde at være sikker på at hjælpen rent faktisk har løst det konkrete problem.

Du får lige et svar med det samme. :^)

Hvis du vil give flere point på et spørgsmål, er der ude i venstre side oppe imod toppen et menupunkt, Funktioner, og under dette er der en mulighed for at give flere point.
Avatar billede nielle Nybegynder
31. august 2006 - 11:50 #56
PS: Det kunne da være at dr_chaos og hmortensen også skulle have noget. De er trods alt kommet med nogle væsentlige bidrag. :^)
Avatar billede dr_chaos Nybegynder
31. august 2006 - 13:07 #57
jeg smider bare et svar så er det optil dig selv om du vil accepterer mit svar :)
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