Announcement

Collapse
No announcement yet.

ASPx Button Eventhandler funktioniert nicht...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ASPx Button Eventhandler funktioniert nicht...

    Hi zusammen...
    <br>
    Aufgabe:
    <br>Erstelle einen neuen Button im Panel "pnl_allgemein" über den Aufruf einer Funktion. Beim klicken des neuen Buttons soll die Farbe des "Erzeuger-Buttons" Rot werden...
    <br>Problem:
    <br>Ich habe euch hier mal meinen Quellcode für die Aufgabe gestellt...
    Ich habe schon verschiedene Foren und Hilfeseiten durchsucht, aber keine konnte mir eine funktionierende Lösung bieten.
    Nun wende ich mich hoffnungsvoll an euch, dieses Problem zu knacken...
    Da der Eventhandler das Problem ist...
    Der button wird erstellt, jedoch wird das Event nicht mit übergeben. d.h. der Button macht nix.
    <br>Quelltext:
    <br>using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Data.Sql;
    using System.Data.SqlClient;
    using System.Configuration;
    using System.Web.Services;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    <br> ...
    Button mybutton;
    ...
    <br> public void ButtonClick(Object sender, EventArgs e)
    {
    Button1.BackColor = Color.Red;
    }

    public void create_btn(Color farbe, string mytext, Unit hoehe, Unit breite)
    {
    mybutton = new Button();
    mybutton.ID = mytext;
    mybutton.Text = mytext;
    mybutton.Click += new EventHandler(this.ButtonClick);
    pnl_allgemein.Controls.Add(mybutton);
    }
    <br>Nachtrag:
    <br>Ich bin für jede Hilfe dankbar.
    <br>mfG da`Nooa

  • #2
    hallo nooa,

    wann wird das create_btn aufgerufen?

    b

    Comment


    • #3
      nach dem drücken des erzeugerbuttons

      ich hatte mir gespart den aufruf mit aufzuschreiben...

      (aber nach der deklaration der funktion

      Comment


      • #4
        Hallo,
        &gt;nach dem drücken des erzeugerbuttons... <br>
        eine über HTTP aufgerufene Webanwendung arbeitet generell Zustandslos, auch wenn ASP.NET dies auf den ersten Blick verbirgt. Sobald ein Postback beim Server eintrifft, wird die Instanz der Codebehind-Klasse neu erzeugt. Allerdings haben die erst zur Laufzeit erzeugten Controls keinen Eintrag in der Codebedhind-Klasse (sondern nur in der <i>Page.Controls</I>-Kollektion), so dass nach dem Postback nur noch der <i>ViewState</i> herangezogen werden kann. Dies bedeutet, dass jede dynamisch vorgenommene Zuordnung bei jedem erneuten Aufruf wiederholt ablaufen muss - <b>Page_Load</b> wäre eine geeignete Stelle.

        Im Detail laufen die folgenden Schritte hinter den Kulissen ab:
        <li>Browser löst einen erneuten Request-Aufruf der ASPX-Seite aus
        </li>
        <li>ASP.NET lädt die Code Behind-Datei der ASPX-Seite und löst das <b>
        <font color="#000080">Page_Init</font></b>-Ereignis aus. Der Sourcecode kann
        zu diesem Zeitpunkt <b>nicht</b> erkennen, ob die Web Form zum ersten Mal
        aufgerufen wird oder ob der Request-Aufruf eine Reaktion auf das Bestätigen
        des Formulars ist. Auch die vom Benutzer gemachten Eingaben stehen zu diesem
        Zeitpunkt nicht zur Verfügung.
        </li>
        <li>ASP.NET läst das <b><font color="#000080">Page_Load</font></b>-Ereignis
        aus, wobei jetzt ein <b><font color="#000080">Postback</font></b> (d.h. das
        Abschicken des Formulars über den Submitt-Button) über die Eigenschaft <b>
        <font color="#000080">IsPostBack</font></b> erkannt wird. Außerdem kann das
        Programm nun auf die Werte des Formulars zurückgreifen. Funktional
        entspricht Page_Load dem Load-Ereignis von Windows Forms.
        </li>
        <li>Alle Ereignisse der Controls werden ausgelöst, <b>wenn</b> es sich um
        einen Postback handelt (d.h. der Browser &quot;sammelt&quot; alle relevanten
        Ereignisse bis zum Zeitpunkt des PostBacks). Zum Beispiel löst ASP.NET ein
        <b><font color="#000080">TextChanged</font></b>-Ereignis aus, wenn der
        Benutzer im Formular vor dem Abschicken den Wert eines Textfeldes geändert
        hat.
        </li>
        <li>Das letzte Control-Ereignis betrifft das Control, dass den Postback
        ausgelöst hat, wobei dies im Normalfall das <b><font color="#000080">Click</font></b>-Ereignis
        eines Buttons ist.
        </li>
        <li>Die Seite wird gerendert und an den Browser zurückgeliefert, wobei
        bestimmte Informationen über den VIEWSTATE (versteckte Felder) abgelegt
        werden.
        </li>
        <li>Am Ende löst die Web Form das <b><font color="#000080">Unload</font></b>-Ereignis
        aus. </li&gt

        Comment


        • #5
          hi,
          <br>ok nun weis ich wieder etwas neues über aspx ;D
          Danke.

          <br>Ich habe das problem nun erkannt, jedoch weiterhin noch nicht gelöst.

          <br>mein quelltest ist in sofern richtig gewesen.
          Wenn ich den funktionsinhalt in die "Page_Load" kopiere wird alles zu miener zufriedenheit ausgeführt.
          sollte ich dies allerdings wieder in die funktion kopieren wird das ereignis des buttens nicht mehr "weitergegeben"...

          <br>frage nun hierzu:
          muss ich für die funktion zu erzeugen des buttons eine bestimmte art von funktionen benutzen?

          <br>mit einer art der funktion mein ich z.b.: <b>private void ... ()</b>??

          <br>es kann ja nicht sein, dass alles einwandfrei funktioniert wenn ich den code in die page_load schreibe aber nicht in einer gesonderten funktion.

          <br>danke trotzdem für die hilfe.

          <br>sollte jemand hierzu eine lösung finden oder parat haben bin ich sehr dankbar.

          <br>MfG Noo

          Comment


          • #6
            ich habe es schon bei mir probiert - es geht - schicke es nachher - hab gerade besprechung!

            b

            Comment


            • #7
              hallo sooa,

              die funktion public void create_btn ruft sich ja nicht von selbst auf!
              <br>
              in der page_load funktion funktioniert es. sie gehört standardmäßig zu den ereignissen, die im lebenszyklus der asp.net-seite aufgerufen werden. hierzu empfehle ich die erklärungen von ms: http://www.microsoft.com/germany/msdn/library/net/aspnet/InterneAenderungenInASPNET20.mspx
              <br>
              aber mal eine andere frage: warum willst du den button programmtechnisch erzeugen? kannst du nicht einfach einen im design-modus in's panel ziehen?

              b

              Comment


              • #8
                hi bo,

                ich will damit erreichen, dass ich eine variable anzahl von buttons habe.
                d.h. ich lege mir eine SQL-Datenbank an, sage ihr bestimmte parameter. z.b. farbe, schriftzug, ereignis

                die würde die verarbeitung enorm erleichtern...
                und da diese buttons dann eine variable seite "erstellen", muss ich natürlich auch neue buttons generieren.

                dies klappt auch einwandfrei, allerdings nur im pageload.
                da ich wie gehabt das problem in der extrafunktion habe mit der übergabe des ereignises.

                aber trotzdem danke bogart.
                du hast mir sehr geholfen.

                P.s.:
                Wie ich geschrieben hatte hatte ich den aufruf weg gelassen. weil ich mir dachte es sei net so wichtig.

                aber ich habe mitbekommen, das es funktioniert wenn der aufruf in der page_load ist.
                da ruf ich sie allerdings nicht auf, sondern in einem weiterem unterprogramm.

                mfG Noo

                Comment


                • #9
                  Lösung?

                  Hallo,

                  ich stehe gerade vor einem ähnlichen Problem.
                  Hattest Du damals dass Problem gelöst ?

                  Gruß

                  Jörg

                  Comment

                  Working...
                  X