Avatar billede neoman Novice
27. marts 2007 - 11:23 Der er 1 kommentar og
1 løsning

Dynamisk tilføjede kontroller og events

Jeg har nogle checkboxes som jeg tilføjer udner opbygningen af en dynamisk tilføjet tabel, og har et mærkeligt antal kald til myCheckbox_CheckedChanged - den bliver kaldt ved hvert page_load for ALLE boxe hvor jeg har sat flue ben i, mens den ej bliverkaldt for dem hvor jeg fjerner fluebenet. For nu at forstå hvad der foregår har jeg lavet et meget simpelt eksempel :

Partial Class Admin_test4
    Inherits System.Web.UI.Page
    Protected WithEvents mybox As CheckBox

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        mybox = New CheckBox
        mybox.AutoPostBack = True
        mybox.ID = "B1"
        AddHandler mybox.CheckedChanged, AddressOf mybox_CheckedChanged
        PlaceHolder1.Controls.Add(mybox)

        mybox = New CheckBox
        mybox.AutoPostBack = True
        mybox.ID = "B2"
        AddHandler mybox.CheckedChanged, AddressOf mybox_CheckedChanged
        PlaceHolder1.Controls.Add(mybox)

        mybox = New CheckBox
        mybox.AutoPostBack = True
        mybox.ID = "B3"
        AddHandler mybox.CheckedChanged, AddressOf mybox_CheckedChanged
        PlaceHolder1.Controls.Add(mybox)

        System.Diagnostics.Debug.Write("pageload complete" & vbCrLf)
    End Sub
    Protected Sub mybox_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles mybox.CheckedChanged
        Dim mybox As CheckBox
        mybox = sender
        System.Diagnostics.Debug.Write("changed " & mybox.ID.ToString & vbCrLf)
    End Sub

End Class


og

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="test4.aspx.vb" Inherits="Admin_test4" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
   
    </div>
    </form>
</body>
</html>

Når jeg klikker på en checkbox som ikke er den sidste, så bliver CheckedChanged kaldt en gang som den skulle, uanset om jeg klikker eller afklikker. MEN, når jeg gør det med den  sidste checkbox, så bliver CheckedChanged kaldt 2 gange (uanset om der er 2, 3 eller 4 checkboxe i alt). Hvordan kan det være ?
Avatar billede neoman Novice
27. marts 2007 - 12:02 #1
Mysteriet er halvt-løst: hvis jeg smider AddHandler linjen ud for alle checkboxene, så kører mybox_CheckedChanged alligevel, men kun for den sidste checkbox. Med AddHandler-linjen inde, så får den sidste checkbox åbenbart to Handlers - den jeg tilføjer og den handler den åbenbart får per default. Spørgsmålet er så, hvordan definerer man en og kun een handler som gælder for alle checkboxene ?
Avatar billede neoman Novice
30. marts 2007 - 08:43 #2
Og svaret er, at man ikke blot dumt skal kopiere hvad et dobbeltklik på en checkbox producerer.  Deklarationen af handleren i code-behind filen skal naturligvis IKKE inkludere "Handles mybox.CheckedChanged" i modsætning til den deklaration som er anført i den her anførte code-behind. Fejl 40 !
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