18. august 2006 - 18:39Der 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?
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
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.
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 =)
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.
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.
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.
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.
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?
} 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.
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.
"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.
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 =)
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:
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.
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).
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.
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)
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.
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 + "'";
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); }
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å =)
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.
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.
jeg smider bare et svar så er det optil dig selv om du vil accepterer mit svar :)
Synes godt om
Ny brugerNybegynder
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.