[ASP.NET] Custom Control eventhandler probleem

Pagina: 1
Acties:

  • -Sander1981-
  • Registratie: November 2000
  • Laatst online: 22-04-2020
Ik heb een probleem met het opvangen van events...
ik heb een structuur vergelijkbaar met Mammaplank in deze post.
Het verschil zit hem hierin: de knop wordt aangemaakt in de Constructor, en in de Render-methode roep ik voor die knop verder alleen knop.RenderControl( writer ) aan.
Ik heb voor deze methode gekozen omdat er een control in deze control regelmatig vervangen moet worden (de knop blijft overigens bestaan)
Het control verwijderen en weer neerzetten werkt totaal niet zoals verwacht, dus de structuur in de constructor opzetten is geen optie.

ook na het initialiseren van de knop in de constructor toevoegen:
C++:
1
this.Controls.Add( this.button );

lijkt geen effect te hebben...

hierbij nog ff een deel van mijn test code:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
    public class RenderTestControl : System.Web.UI.WebControls.Panel
    {
        private string text;
        private TextBox textBox;
        private Button button;

        public RenderTestControl()
        {
            this.button = new Button();
            this.button.Click += new EventHandler(button_Click);
            this.Controls.Add( this.button );

            this.textBox = new TextBox();
        }

        protected override void Render(HtmlTextWriter writer)
        {
            this.RenderBeginTag( writer );
            
            writer.AddAttribute( HtmlTextWriterAttribute.Width, "100%" );
            writer.AddAttribute( HtmlTextWriterAttribute.Height, "100%" );
            writer.RenderBeginTag( HtmlTextWriterTag.Table );
            writer.RenderBeginTag( HtmlTextWriterTag.Tr );
            writer.AddAttribute( HtmlTextWriterAttribute.Colspan, "2" );
            writer.RenderBeginTag( HtmlTextWriterTag.Td );
            writer.Write(Text);
            writer.RenderEndTag( );
            writer.RenderEndTag( );

            writer.RenderBeginTag( HtmlTextWriterTag.Tr );
            
            writer.RenderBeginTag( HtmlTextWriterTag.Td );
            this.textBox.RenderControl( writer );
            writer.RenderEndTag( );

            writer.RenderBeginTag( HtmlTextWriterTag.Td );
            this.button.RenderControl( writer );
            writer.RenderEndTag( );

            writer.RenderEndTag( );

            writer.AddAttribute( HtmlTextWriterAttribute.Height, "100%" );
            writer.RenderBeginTag( HtmlTextWriterTag.Tr );
            writer.AddAttribute( HtmlTextWriterAttribute.Colspan, "2" );
            writer.RenderBeginTag( HtmlTextWriterTag.Td );
            writer.RenderEndTag( );
            writer.RenderEndTag( );
            writer.RenderEndTag( );

            this.RenderEndTag( writer );
        }

        private void button_Click(object sender, EventArgs e)
        {
            this.text = this.textBox.Text;
        }
    }

(Er staat wel C++, maar het is natuurlijk C#...)

I don't have a solution; but I do admire the problem.


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Simpel gezegd zoek je dus iets als:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Imports System.Web.UI.WebControls
Imports System

Public Class Class1
    Inherits Panel

    Private Sub InitPage(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Init

        '''-----------------------------------------------------------------------------
        ''' <summary>
        ''' Create a button
        ''' </summary>
        '''-----------------------------------------------------------------------------
        Dim __button As LinkButton = New LinkButton
        __button.Text = "ClickMe!"
        AddHandler __button.Click, AddressOf ClickButton

        '''-----------------------------------------------------------------------------
        ''' <summary>
        ''' Create a label
        ''' </summary>
        '''-----------------------------------------------------------------------------
        Dim __label As Label = New Label
        __label.ID = "labeltje"

        '''-----------------------------------------------------------------------------
        ''' <summary>
        ''' Create a textbox
        ''' </summary>
        '''-----------------------------------------------------------------------------
        Dim __textBox As TextBox = New TextBox
        __textBox.ID = "tekstje"

        '''-----------------------------------------------------------------------------
        ''' <summary>
        ''' Add the controls
        ''' </summary>
        '''-----------------------------------------------------------------------------
        Me.Controls.Add(__button)
        Me.Controls.Add(__label)
        Me.Controls.Add(__textBox)

    End Sub

    '''-----------------------------------------------------------------------------
    ''' <summary>
    ''' Handler for the button click event
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    ''' <history>
    '''     [****]  12/19/2003  Created
    ''' </history>
    '''-----------------------------------------------------------------------------
    Private Sub ClickButton(ByVal sender As Object, ByVal e As EventArgs)

        CType(Me.FindControl("labeltje"), TextBox).Text = CType(Me.FindControl("tekstje"), TextBox).Text

    End Sub

End Class

Alle poespas van style er even vanaf gehaald; kan je ook in het init event doen. Ik zie eigenlijk geen nut waarom je in het renderevent nog zaken wilt gaan doen.

[ Voor 20% gewijzigd door gorgi_19 op 19-12-2003 17:12 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • -Sander1981-
  • Registratie: November 2000
  • Laatst online: 22-04-2020
gorgi, bedankt voor je antwoord...

echter, nu heb ik dus gevonden wat het probleem was:
als je goed in mijn code hierboven kijkt, zie je dat ik dus wel de knop, maar niet de textbox aan het control toevoeg... na dit gedaan te hebben, werkt mijn voorbeeld wel...

Voor de liefhebber: ik heb ook de volgorde van afhandelen in een Page object gevonden: Page object model
Vooral de tabel en de text eronder is dan interessant.

[ Voor 31% gewijzigd door -Sander1981- op 22-12-2003 12:37 ]

I don't have a solution; but I do admire the problem.