Avatar billede kak Nybegynder
28. april 2006 - 13:56 Der er 11 kommentarer og
1 løsning

OnClick event på dynamisk button

Jeg tilføjer nogle knapper dynamisk til en placeholder på denne måde:

Dim btn As Button = New Button
btn.Text = "Test"
btn.ID = "btn" & i
btn.OnClientClick = "mySub(i)"
Placeholder1.Controls.Add(btn)

Knappen bliver tilføjet, men onclick eventen virker ikke. Hvordan skal man gøre på dynamiske knapper, så onclick kommer til at virke?
Avatar billede dr_chaos Nybegynder
28. april 2006 - 14:03 #1
knappen skal tilføjes ved hvert postback f.eks. i prerender.
Avatar billede kak Nybegynder
28. april 2006 - 16:15 #2
Jeg har nu flyttet det til page_prerender men det virker stadig ikke. Jeg kan lige nå at se, at der kommer en javascript-fejl, inden siden reloader og mySub() er en vb-funktion (det fik jeg jo heller ikke skrevet i mit spørgsmål)
Avatar billede thrytter Nybegynder
28. april 2006 - 17:40 #3
Prøv at flytte koden til Page_Load

Vil mene at Page_Prerender er for sent, da control events udføres før denne.

http://msdn2.microsoft.com/en-us/library/ms178472(VS.80).aspx
Avatar billede kak Nybegynder
28. april 2006 - 19:05 #4
Den kører desvære stadig ikke mySub, selvom koden er i page_load
Avatar billede thrytter Nybegynder
28. april 2006 - 20:42 #5
btn.OnClientClick vil udføre et client-side script, og det er vel ikke dit ønske.

Vil mene at du skal tilføje noget i stil med:
  btn.Click += new EventHandler(btn_Click);

og en funktion til at modtage eventet:
  private void btn_Click(object sender, EventArgs e)
  {
    int knapnummer = (int) e.CommandArgument;
  )

Knapnummer kan sendes til event-handleren med:
  btn.CommandArgument = (string) i;
Avatar billede kak Nybegynder
28. april 2006 - 22:48 #6
Jeg bruger vb, og kan ikke umiddelbart få det til at virke.

Så vidt jeg har fundet frem til, skal min sub skrives sådan her...
Private sub mySub(byval i) handles button.click

Men da knapperne får forskellige id (der kan godt laves flere dynamisk), ved jeg ikke hvordan jeg skal formulere "button.click" korrekt.
Avatar billede kak Nybegynder
29. april 2006 - 10:36 #7
Jeg fandt denne artikel, der viser hvordan det gøres:
http://www.dotnetbips.com/articles/displayarticle.aspx?id=18

Min sub skal se således ud:
Sub mySub(ByVal s As Object, ByVal e As EventArgs)
....

Og den skal tilføjes sådan her til min dynamiske knap:
AddHandler btn.Click, AddressOf mySub

Vil I smide et svar begge to, så I kan få point for jeres hjælp?
Avatar billede kak Nybegynder
29. april 2006 - 10:43 #8
Jeg glemte lige noget.... Jeg skal på en eller anden måde, have fat på et parameter fra knappen. Enten id'et på knappen eller også skal jeg medsende et parameter.

Nogen bud på, hvordan jeg klarer den?
Avatar billede kak Nybegynder
29. april 2006 - 11:11 #9
Jeg er stødt på endnu  et lille problem.

De dynamsike knapper skal bruges i forbindelse med en listbox. Hver gang der tilføjes en linie i listboxen, skal der tilføjes en knap ud for linien.

Jeg laver de dynamsike knapper i page_load, men det virker som om, at koden dermed bliver kaldt, før de nye linier bliver tilføjet i listboxen.

Første gang jeg tilføjer en linie, laves der ikke en knap. Anden gang, laves der en knap ud for den første linie. Tredje gang, laves der knapper ud for de to første linier, osv.

Men der skulle gerne være en knap ud for hver eneste linie, så hvor skal jeg placere min kode?
Avatar billede thrytter Nybegynder
29. april 2006 - 11:15 #10
Ved dynamisk oprettelse af knapper kan du ikke bruge
  Private sub mySub(byval i) handles button.click

da knappen/knapperne ikke er en del af det "faste" kontroltræ eller hvad det nu hedder. Du skal/bør derfor lave en event-handler som håndterer events på knappen.

Du kan ikke sende parametre direkte til event-handleren med "mySub(byval i)" men skal overføre parametre ved btn.CommandName og/eller btn.CommandArgument som derefter kan fanges i event-handleren.

Du får det lige i VB

Angivelse af event-handler
  AddHandler btnTest.Command, AddressOf btn_click

Angivelse af parameter
  btn.CommandArgument = i.ToString

Funktion til modtagelse af event
  Private Sub btn_click(ByVal sender As System.Object, ByVal e As CommandEventArgs)
    Dim knapnummer as integer = Convert.ToInt32(e.CommandArgument)
  End Sub

Hvis du vil have fat i selve knappen (som der blev klikket på) kan du i btn_click bruge:
  CType(sender, Button).Text = "Jeg er knap: " & e.CommandArgument.ToString
Avatar billede thrytter Nybegynder
29. april 2006 - 11:17 #11
Du får lige et svar - så ikke lige dine sidste indlæg
Avatar billede kak Nybegynder
29. april 2006 - 11:27 #12
Helt perfekt! Nu får jeg "i" med, så jeg kan genkende knappen!

Så mangler jeg bare at placere koden det rigtige sted, så alle knapperne bliver lavet.
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