Hur skall man använda  AddHandler och Adressof om man skapar upp en knapp dynamiskt i en class som man sedan laddar i en placeholder. Försöker förklara igen. Jag vill skapa upp lite knappar dynamiskt i en class som jag sedan skickar till en placeholder på min ascx-sida. Men sedan vill jag också kunna fånga upp knapptryckningar. Det som är problemet är Föresten hur i hela friden kan servern veta att följande html skall hoppa in i subben "command_makulera" ?  Sök på ASP.NET Page Life Cycle på exempelvis Google eller MSDN, du måste läsa på om de olika eventen för att se varför det inte fungerar. Jag har läst på MSDN och på ASP.net om delegates, events mm men jag kan ändå omvandla det de något som hjälper min situation.  Om du kör automatisk "EventWireUp" kommer eventhandlers att tilldelas vid ett visst ögonblick i livscykeln - DÅ måste kontrollen finnas (därav tipset om att läsa på om just livscykeln för Page-objektet). Grattis! Skam den som ger sig! ;) Det var inte den... utan Page_Init och CommandEventHandler som var lösningen Ah, trodde att du hade ändrat det tidigare...Deklarera event för dynamiska knappar
    
    
Skall de angess i classen 
Så här gör jag när jag skapar upp en imagebutton i en ascx :
<code>
 Dim cb As New ImageButton
        With cb
            .ImageUrl = "pic_sajt/trashcan.gif"
            .CssClass = "trashcan"
            .ID = o.ToString()
            .CommandArgument = CStr(o)
            .ToolTip = "Makulera"
        End With
        AddHandler cb.Command, AddressOf command_makulera
</code>Sv:AddHandler ...
    
    
Men jag får bara fel :
Error Value of type 'System.EventHandler' cannot be converted to 'System.Web.UI.WebControls.CommandEventHandler'. 
Error Method 'Protected Sub command_makulera(sender As Object, e As System.Web.UI.WebControls.CommandEventArgs)' does not have the same signature as delegate 'Delegate Sub EventHandler(sender As Object, e As System.EventArgs)'. 
Min klass ser ut som följer :
 <code>
Min klass ser ut som följer :
 
Imports Microsoft.VisualBasic
 
Public Class grid_col
 
    
    Public Id As String
    Public ImageUrl As String
    Public Tooltip As String
    Public CommandArgument As String
    Public EditType As et
    Public Visible As Boolean
    Public _Plh As New PlaceHolder
    Public _Addressof As EventHandler 
 
 
    Public Enum et
        Normal = 1
        Label = 2
        Textbox = 3
        Checkbox = 4
        Imagebutton = 5
        Image = 6
    End Enum
 
 
    Public Function MAKEPLH() As PlaceHolder
        MAKEPLH = Nothing
        Dim test As New PlaceHolder
 
        Select Case EditType
 
            
            Case et.Imagebutton
                Dim lbu As New ImageButton
                With lbu
                    .ID = Id
                    .ImageUrl = ImageUrl
                    .ToolTip = Tooltip
                    AddHandler .Command, _Addressof
                End With
                test.Controls.Add(lbu)
 
 
        End Select
 
        Return test
 
    End Function
 
End Class
</code>
På ascx sidan ser det ut så här  :
 
<code>
Partial Class adm_beslut_insertupdate
    Inherits System.Web.UI.UserControl
Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
 
        With objCol
            .Id = "2345_"
            .EditType = grid_col.et.Imagebutton
            .ImageUrl = ""
            ._Addressof = AddressOf command_makulera
        End With
        PlaceHolder1.Controls.Add(objCol.MAKEPLH)
 
    End Sub
 'Tar hand om knapp tryckning
 Protected Sub command_makulera(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.CommandEventArgs)
 
        ' hämtar id för tryckt knapp
        Dim item_number As String = e.CommandArgument()
 
       
        'Här har jag lite mer kod på vad som skall hända
 
    End Sub
 
End class
</code>Sv: AddHandler ...
    
    
Från classen:
<code>
Public _Addressof As EventHandler 
AddHandler .Command, _Addressof
</code>
Från Ascx:en:
<code>
._Addressof = AddressOf command_makulera
</code>Sv:AddHandler ...
    
    
Jag har jämfört HTML-koden för en Imagebutton som är skapad dynamiskt i min ascx via följande kod:
<code>
Dim cb As New ImageButton
        With cb
            .ImageUrl = "pic_sajt/trashcan.gif"
            .CssClass = "trashcan"
            .ID = o.ToString()
            .CommandArgument = CStr(o)
            .ToolTip = "Makulera"
        End With
        AddHandler cb.Command, AddressOf command_makulera
</code>
med den Imagebutton som jag skapat via min class och de ser i princip identiska ut. Men ändå hoppar man inte in i subben command_makulera vid click.
....?Sv: AddHandler ...
    
    
<code>
<input type="image" name="ucMainwindow$ctl00$2" id="ucMainwindow_ctl00_2" title="Makulera" class="trashcan" src="pic_sajt/trashcan.gif" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ucMainwindow$ctl00$2", "", true, "", "", false, false))" style="border-width:0px;" />
</Code>Sv: AddHandler ...
    
    
Det är av yttersta vikt att man lägger till dynamiska kontroller vid rätt tidpunkt, samt att man återskapar dom vid PostBacks.
Lycka till!Sv:AddHandler ...
    
    
Det jag tillslut vill åstakomma med min kod är en class som dynamiskt bygger upp en gridd. Sv:AddHandler ...
    
    
Alla buttons syns när de ska. Det som är problemet är att synka ihop den dynamiskt skapade knappen  med den sub som skall utföra händelsen vi klickadet.Sv: AddHandler ...
    
    
Du kan lägga till en kontroll så sent som OnPreRender (den kommer synas), men gör du det inte under exempelvis OnInit kommer du inte få någon funktionalitet, ViewState etc.Sv:AddHandler ...
    
    
EventWireUp = AutoEventWireup ? 
<code>
 <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
</code>
Öppnar mitt objekt från "Page_PreRender"  OnInit ? i VB...Sv: AddHandler ...
    
    
"AutoEventWireUp" löser ofta många problem! :)Sv:AddHandler ...
    
    Sv: AddHandler ...
    
    
Som sagt, lägger man till kontroller för sent i livscykeln kommer de ej att inkluderas i kontrollträdet och då kan man inte göra mycket annat än att få dom utritade på skärmen.
Slutet gott, allting gott! :)