04. oktober 2004 - 11:40Der er
18 kommentarer og 1 løsning
Klasser der kan kaldes fra en knap?
Ok, nu bliver det da rigtigt spændende, jeg er kommet lidt videre med mine yatzyterninger og skal til at forsøge mig med et scoreboard, jeg kunne tænke mig at lave en klasse(r) der kontrollere de forskellige slag. F.eks på scoreboardet er der en knap ud for f.eks enere så slår man måske 3 enere og vil tilføje denne værdi til textboxen der viser point for slåede enere, så klikker man på knappen ud for enere og værdien bliver angivet i boxen. Ja det lyder nok lidt kringlet. Det jeg så forstiller mig er man jeg kunne have en klasse der duer til at lave denne routine for alle slag med ens antal øjne (1-6 , 3 ens , fire ens , yatzy) og så kalde denne klasse fra min knap(per)Lyder det helt gak? Så bliver det nok mere tricky når jeg kommer til fullhouse og straights men det må jeg så tage til den tid. Spørgsmålet er også; hvordan kalder jeg denne klasse fra min(e)knap(per)? hvis det i det hele taget er en god ide at gøre sådan?
Nedenstående er hvad du får, hvis du i VS trækker en knap ind på en form, og dobbeltklikker på den. (det er altså ikke noget du skal skrive selv, men det ville være godt hvis du kunne se fidusen i det).
En knap på en aspx-side <asp:Button id="Button1" runat="server" Text="Button"></asp:Button>
Og en dekleration i din code-behind for knappen : protected Button Button1;
Og i din initialiseringmetode angives det, at du gerne vil abbonnere på klik-eventet fra knappen Button1.Click += new EventHandler(this.Button1_Click); // Button1_Click er så metoden der kaldes når der klikkes
Og selve handleren af klik-eventet Bemærk at signaturen (object sender, EventArgs e) IKKE kan omgås... så skal en handler af et knap-klik event se ud. (du kan dog godt omdøbe sender, og e hvis du vil... typerne object og EventArgs må du ikke ændre). private void Button1_Click(object sender, EventArgs e) { // her vil du så gerne kalde noget. }
Såhh... hvis du har denne klasse :
public class SomeClass { // og noget klassen kan public string GetSomeString() { return "hej"; } }
Kan du udfylde handleren som nedenstående :
private void Button1_Click(object sender, EventArgs e) { // først en forekomst af typen SomeClass (et objekt) SomeClass sc = new SomeClass();
// du kan så kalde metoden GetSomeString() på objektet da det jo er baseret på en type, der har en sådan metode defineret. string nogetTekst = sc.GetSomeString();
// og det kan du så skrive ud hvis du vil (det med Response.Write er ikke en anbefaling). Response.Write(nogetTekst); }
// her påbegynder du en metode : private void Button2_Click(object sender, System.EventArgs e) // og lige nedenunder påbegynder du en til public int AddUpDice( int DieNumber, Dice[] myDice )
Prøv sådan her istedet :
private void Button2_Click(object sender, System.EventArgs e) { int Sum = 0; for( int i = 0; i < 5; i++ ) { if( myDice[i].RollNumber == DieNumber ) { Sum += DieNumber; } } return Sum; }
ok, det hjalp. Se hvis jeg nu skulle anvende dette, det er jo taget ud af en større sammenhæng, skal jeg så have myDice kaet om til navnet på min array? som hedder rnd
har jo denne: private int RollDice() { return rnd.Next(1,7); }
ahhh, for at vende tilbage til min oprindlige plan om en klass jeg kan kalde fra knappen kunne jeg så have en klasse der hedder class DiceScore også i knappen lave en DiceScore = new DiceScore? eller lyder det helt gak?
sådan lige umiddelbart lyder det mere relevant hvis du har et eller andet du kan gemme en score i, og som vil blive bevaret med hvert postback. jeg tror jeg ville starte med at prøve at gemme en int til at begynder med... og så bare lægge summen til den int.
måske er jeg på sporet af noget når jeg skrive følgende private void Button2_Click(object sender, System.EventArgs e) { if (RollDice() == 1) Response.Write ("meee"); Så skriver den ganske rigtigt meee hvis der er en 1.er men jeg syntes ikke den gør det hver gang. Og hvordan får jeg den til at skrive i min textbox txtAces? Lad os sige jeg vil have meee til at stå der til en begyndelse når der et en 1.er
trode jeg var snedig men det var jeg ikke private void Button2_Click(object sender, System.EventArgs e) { int i= 0; if (RollDice() == 1) if ( i = 1) i++; txtAces.Text= i;
hehe nu vil den ikke konvertere int til bool int i= 1; if (RollDice() == i) if ( i = 1) i++; txtAces.Text= Convert.ToString (i);
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.