Avatar billede basementjack Nybegynder
26. oktober 2004 - 17:08 Der er 26 kommentarer og
1 løsning

Få fat i programatisk kontrol

Koden herunder fejler.. Hvordan får jeg fat i fx en textbox som er lavet programatisk efter fx en postback?..

________________________________________
Public Class login: Inherits UserControl
    Public UC As PlaceHolder
    Sub Page_Load
        Dim table As New Table()
        Dim row As New TableRow()
        Dim cell As New TableCell()
       
            Dim txtName As New TextBox()
            txtName.Id = "txtName"
           
            Dim txtPass As New TextBox()
            txtPass.Id = "txtPass"
            txtPass.TextMode = TextBoxMode.Password
           
            Dim btnLogin As New Button()
            btnLogin.Text = "Log ind"
           
            cell.Text = "Navn : "
            row.Cells.Add(cell)
           
            cell = New TableCell()
            cell.controls.Add(txtName)
            row.Cells.Add(cell)
           
            cell = New TableCell()
            cell.Text = "Password : "
            row.Cells.Add(cell)
           
            cell = New TableCell()
            cell.controls.Add(txtPass)
            row.Cells.Add(cell)
           
            cell = New TableCell()
            cell.controls.Add(btnLogin)
            row.Cells.Add(cell)
           
            table.Rows.Add(row)
           
            UC.Controls.Add(table)
        If IsPostBack Then
            Response.write(txtName.Text)
        End If
    End Sub
End Class
Avatar billede snepnet Nybegynder
26. oktober 2004 - 18:03 #1
hej "jack" :o)
hvad er det for en fejl du får ?
mvh
Avatar billede basementjack Nybegynder
26. oktober 2004 - 18:05 #2
'Public Event Click(sender As Object, e As System.EventArgs)' is an event, and cannot be called directly. Use a 'RaiseEvent' statement to raise an event.

Den highligther linien : btnLogin.Click += New EventHandler(btnClicked)
Avatar billede basementjack Nybegynder
26. oktober 2004 - 18:07 #3
Altså da den stadig var med i koden der. :s  Den er lige under, hvor jeg sætter TextMode på txtPass..
Avatar billede snepnet Nybegynder
26. oktober 2004 - 18:10 #4
ok... den linie har du så ikke sendt med første gang :o)

men jeg tror at det på vb'sk skal være noget i denne stil :
AddHandler btnLogin.Click, AddressOf btnLogin_Click

(og du skal så have en implementering af den også.... altså en
btnLogin_Click)

jeg er ikke nogen ørn til VB, men jeg mener det er sådan du gør det...

mvh
Avatar billede snepnet Nybegynder
26. oktober 2004 - 18:10 #5
hehe.... jeg skulle nok lige se hvad du havde sendt der - men jeg var lige ude i køkkenet :o)
mvh
Avatar billede basementjack Nybegynder
26. oktober 2004 - 18:11 #6
Oki.. Og det er i stedet for linien : btnLogin.Click += New EventHandler(btnClicked) ?
Avatar billede basementjack Nybegynder
26. oktober 2004 - 18:12 #7
Hehe.. Ja, det går jo nok.. :)
Avatar billede snepnet Nybegynder
26. oktober 2004 - 18:18 #8
:o)
jeps... det skulle erstatte din += new EventHandler....
mvh
Avatar billede basementjack Nybegynder
26. oktober 2004 - 18:23 #9
Jo det bliver da.. Men den klager som min sub.. :/

Method 'Public Sub btnClicked()' does not have the same signature as delegate 'Delegate Sub EventHandler(sender As Object, e As System.EventArgs)'.

Så prøvede jeg at sætte (sender As Object, e As System.EventArgs) på min sub.. Det gav bare..

Statement cannot appear within a method body. End of method assumed.

Ved du hvad det er der er galt?
Avatar billede snepnet Nybegynder
26. oktober 2004 - 18:26 #10
hvis ellers metoden ligger hvor den skal i klassen - kan du prøve med :
(ByVal sender As System.Object, ByVal e As System.EventArgs)
mvh
Avatar billede snepnet Nybegynder
26. oktober 2004 - 18:26 #11
(metoden=sub'ben :o)
Avatar billede basementjack Nybegynder
26. oktober 2004 - 18:32 #12
Tja den ligger i samme klasse.. Er det ikke godt nok?.. :)
Den ser nu sådan ud :

        Public Sub btnClicked(ByVal sender As System.Object, ByVal e As System.EventArgs)
            Response.Write("Click!")
        End Sub

Den giver stadig fejlen : Statement cannot appear within a method body. End of method assumed.
Avatar billede snepnet Nybegynder
26. oktober 2004 - 19:08 #13
du kan lige se denne "template"

Public Class WebForm1
    Inherits System.Web.UI.Page
    Protected Form1 As HtmlForm

    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private designerPlaceholderDeclaration As System.Object   

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        InitializeComponent()
    End Sub

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim b As New Button
        AddHandler b.Click, AddressOf b_Click
        Form1.Controls.Add(b)
    End Sub
    Private Sub b_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Response.Write("test")
    End Sub
End Class


den skulle virke fint.
mvh
Avatar billede basementjack Nybegynder
26. oktober 2004 - 19:37 #14
Overså en End Sub så havde skrevet to Sub ind over hinanden.. Dummer fejl..
Det virker selvfølgelig, så læg et svar.. :)

Og mange tak
Avatar billede snepnet Nybegynder
26. oktober 2004 - 19:38 #15
det var så lidt :o)
et svar her.
mvh
Avatar billede basementjack Nybegynder
26. oktober 2004 - 19:41 #16
Hmm.. læste lige mit spm.. Vi har ikke snakket om det jeg egentligt spurgte om.. Kan vi hurtigt tage den, så lægger jeg lige lidt ekstra points ind også.. ;)

Fx:
            Dim txtName As New TextBox()
            txtName.Id = "txtName"

Kommer ud som:
            <input name="_ctl3:txtName" type="text" id="_ctl3_txtName" />
Og så kan jeg ikke få fat i den bagefter som fx txtName.Text ...
Avatar billede snepnet Nybegynder
26. oktober 2004 - 19:50 #17
jojo.... der er lidt magi i luften med den slags ;o)

prøv den her :

Public Class WebForm1
    Inherits System.Web.UI.Page
    Protected Form1 As HtmlForm
    Protected someTextBox As New TextBox

    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private designerPlaceholderDeclaration As System.Object   

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        InitializeComponent()
    End Sub

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim b As New Button
        AddHandler b.Click, AddressOf b_Click
        Form1.Controls.Add(someTextBox)
        Form1.Controls.Add(b)
    End Sub
    Private Sub b_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Response.Write(someTextBox.Text)
    End Sub
End Class

mvh
Avatar billede basementjack Nybegynder
26. oktober 2004 - 19:53 #18
Hmm.. Den siger bare System.NullReferenceException: Object reference not set to an instance of an object.
Avatar billede snepnet Nybegynder
26. oktober 2004 - 19:56 #19
hedder din serverside form i aspx-filen Form1 ?
Protected Form1 As HtmlForm // Form1 skal være id-et på formen i aspx-filen :
<form id="Form1" method="post" runat="server">

mvh
Avatar billede basementjack Nybegynder
26. oktober 2004 - 20:02 #20
Ehm.. det gjorde ikke nogen forskel.. Men jeg bruger ikke Form1.Controls.Add(txtName), men ligger den i en celle og det ender med at være en tabel... Eller gør det ikke noget?..
Avatar billede snepnet Nybegynder
26. oktober 2004 - 20:09 #21
gider du sende koden som den ser ud nu ?
mvh
Avatar billede basementjack Nybegynder
26. oktober 2004 - 20:10 #22
Dette er klassen det drejer sig om.. :
Public Class login: Inherits UserControl
    Public UC As PlaceHolder
    Public txtName As TextBox
    Protected enform As HtmlForm
    Dim P As New Protection
   
    Sub Page_Load
        Dim table As New Table()
        Dim row As New TableRow()
        Dim cell As New TableCell()
       
        If P.IsLogged() Then
            Response.Write("2")
        ElseIf P.IsAdmin() Then
            Response.Write("3")
        Else
            Dim txtName As New TextBox()
            txtName.Id = "txtName"
           
            Dim txtPass As New TextBox()
            txtPass.Id = "txtPass"
            txtPass.TextMode = TextBoxMode.Password
           
            Dim btnLogin As New Button()
            btnLogin.Text = "Log ind"
            AddHandler btnLogin.Click, AddressOf btnClicked
           
            cell.Text = "Navn : "
            row.Cells.Add(cell)
           
            cell = New TableCell()
            cell.controls.Add(txtName)
            row.Cells.Add(cell)
           
            cell = New TableCell()
            cell.Text = "Password : "
            row.Cells.Add(cell)
           
            cell = New TableCell()
            cell.controls.Add(txtPass)
            row.Cells.Add(cell)
           
            cell = New TableCell()
            cell.controls.Add(btnLogin)
            row.Cells.Add(cell)
           
            table.Rows.Add(row)
           
            UC.Controls.Add(table)
        End If
    End Sub
   
    Public Sub btnClicked(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Response.Write("Click! ")
        response.Write(txtName.Text)
    End Sub
   
End Class
Avatar billede snepnet Nybegynder
26. oktober 2004 - 20:16 #23
prøv at skift den her :
Dim txtName As New TextBox()
ud med
txtName = New TextBox()

så tror jeg det spiller.

mvh
Avatar billede basementjack Nybegynder
26. oktober 2004 - 20:18 #24
Du har ret!.. Og ved du også hvorfor?.. :p
Avatar billede snepnet Nybegynder
26. oktober 2004 - 20:23 #25
jeps - du laver en ny textbox nede i din metode, og den der så står som din klassevariabel bliver aldrig instantieret - det er derfor den er null når du spørger på den.
mvh
Avatar billede basementjack Nybegynder
26. oktober 2004 - 20:25 #26
Okay. Igen Tak.. Vi snakkes nok ved igen snart.. !)
Avatar billede snepnet Nybegynder
26. oktober 2004 - 20:31 #27
det ser jeg frem til... hold dig munter så længe :o)
mvh
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