none
Methode der ClassB soll TextBox aus ClassA füllen RRS feed

  • Frage

  • Hallo zusammen,

    von mir wieder mal ein Anfängerproblem. Ich möchte eine TextBox aus der Class WebForm1 über eine Methode innerhalb der ClassB füllen.

    Kämpfe ständig mit der Fehlermeldung "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt".

    Zum Verständnis hier der Beispielcode:

    namespace TextBox_aus_Neuer_Klasse_fuellen
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            public void Page_Load(object sender, EventArgs e)
            {
                TextBox1.Text = "Standardtext";
            }
    
            public void Button1_Click(object sender, EventArgs e)
            {
                ClassB myClassB = new ClassB();
                myClassB.fuellen();
            }
        }
    
        public class ClassB : WebForm1
        {
            public void fuellen()
            {
                TextBox1.Text = "NeuerText";
            }
        }
    }

    Eine Erklärung und der korrigierte Code wären für mich sehr hilfreich.

    Vielen Dank für euer Bemühen.

    romego57

    Dienstag, 20. März 2012 12:26

Antworten

  • Hi,

    Ich möchte mir Kenntnisse über Zusammenhänge aneignen die praktikabel sind und auch Kenntnisse über Zusammenhänge, die nicht funktionieren.

    Ok.

    Zur Erklärung: Das ganze mag vielleicht mit ASP nicht der beste Weg sein – eigentlich geht es nur um die Frage, kann ich aus einer selbst geschriebenen Klasse, (die auch in einer eigenen Datei stehen kann) auf Steuerelemente zugreifen, die auf einer WebForm Namens WebForm1.aspx plaziert sind?

    Man könnte schon. Es macht aber trotzdem keinen Sinn. Du brauchst immer eine Instanz, um auf die jeweiligen Eigenschaften, Controls, ... zugreifen zu können.

    Es gibt mehrere Wege, wie man das von dir gewünschte umsetzen kann.

    a) Eine gemeinsame Basisklasse, die von System.Web.UI.Page ableitet, erstellen und die WebForms dann nicht direkt von System.Web.UI.Page, sondern halt von deiner Klasse ableiten. In deiner Basisklasse kannst Du dann auch eigene Controls, Methoden, ... unterbringen, die Du dann sowohl in deiner Basisklasse als auch in der davon abgeleiteten WebForm selbst direkt ansprechen kannst.

    namespace Basisklassen
    {
        public class MyPage : System.Web.UI.Page
        {
            public void fuellen()
            {
                (TextBox)this.FindControl( "TextBox1" ).Text = "NeuerText";
            }
     
            public string Text1()
            {
                return "Hallo Welt";
            }
     
            public string Text2()
            {
                return "Hallo Welt, die zweite";
            }
        }
    }
    

    Du würdest hier also deine WebForm von Basisklassen.MyPage ableiten. Wenn deine WebForm ein Control "TextBox1" vom Typ "TextBox" hat, kannst Du über die Methode "fuellen" diese mit einem Text versehen.

    b) Du erstellst innerhalb der WebForm eine Instanz einer Klasse, die die Methoden und/oder Eigenschaften für die Texte bereitstellt. Der Weg wäre dann andersrum als von dir angedacht, die Controls holen sich ihre Texte also von der Instanz der neuen Klasse.

    Dazu kannst Du auch die obige Basisklasse verwenden und dann in deiner WebForm bspw. per:

    this.Textbox1.Text = this.Text1();
    this.Button1.Text = this.Text2();

    die Texte zuweisen.

    Da ich das jetzt nur schnell dahingeschrieben habe, könnten sich noch Fehlerchen im Code verstecken^^ Der weg sollte aber klar sein.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort vorgeschlagen Horizon_Net Dienstag, 20. März 2012 17:32
    • Als Antwort markiert romego57 Donnerstag, 22. März 2012 21:34
    Dienstag, 20. März 2012 16:57
    Moderator
  • Hi Stefan,

    vielen Dank für die ausführliche Antwort. Hat mir geholfen und ich sehe klarer.

    Beste Grüße

    romego57

    • Als Antwort markiert romego57 Montag, 2. April 2012 18:43
    Donnerstag, 22. März 2012 21:15

Alle Antworten

  • Hi,

    da hast Du wohl ein kleines bis mittleres Verständnisproblem. Das, was du da machen willst, macht IMHO keinen Sinn und wird auch nicht funktionieren.

    Was willst Du denn erreichen? Welche Seite wird vom Client aufgerufen? Wie sieht die Deklaration der aspx Seite aus?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 20. März 2012 15:05
    Moderator
  • Hi Stefan,

    Danke, dass du geantwortet hast. Was will ich erreichen?

    Ich möchte das Programmieren mit ASP und C# lernen. Zu
    Anfang machen beim lernen viele Dinge keinen Sinn, aber genau das gehört nun
    mal dazu. Ich möchte mir Kenntnisse über Zusammenhänge aneignen die praktikabel
    sind und auch Kenntnisse über Zusammenhänge, die nicht funktionieren.

    Zur Erklärung:

    Das ganze mag vielleicht mit ASP nicht der beste Weg sein –
    eigentlich geht es nur um die Frage, kann ich aus einer selbst geschriebenen
    Klasse, (die auch in einer eigenen Datei stehen kann)  auf Steuerelemente zugreifen, die auf einer
    WebForm Namens WebForm1.aspx plaziert sind? In meinem Fall ist es eine TextBox
    und ein Button.

    Das ganze passiert aus VisualStudio 2010 heraus. Der Client könnte in diesem Fall nur die WebForm1.aspx aufrufen.Die Seite ist standardmäßig von VS erzeugt.

    Konnte ich mich jetzt verständlicher ausdrücken?

    Vielen Dank für eine Antwort

    romego57


    Dienstag, 20. März 2012 15:49
  • Hi,

    Ich möchte mir Kenntnisse über Zusammenhänge aneignen die praktikabel sind und auch Kenntnisse über Zusammenhänge, die nicht funktionieren.

    Ok.

    Zur Erklärung: Das ganze mag vielleicht mit ASP nicht der beste Weg sein – eigentlich geht es nur um die Frage, kann ich aus einer selbst geschriebenen Klasse, (die auch in einer eigenen Datei stehen kann) auf Steuerelemente zugreifen, die auf einer WebForm Namens WebForm1.aspx plaziert sind?

    Man könnte schon. Es macht aber trotzdem keinen Sinn. Du brauchst immer eine Instanz, um auf die jeweiligen Eigenschaften, Controls, ... zugreifen zu können.

    Es gibt mehrere Wege, wie man das von dir gewünschte umsetzen kann.

    a) Eine gemeinsame Basisklasse, die von System.Web.UI.Page ableitet, erstellen und die WebForms dann nicht direkt von System.Web.UI.Page, sondern halt von deiner Klasse ableiten. In deiner Basisklasse kannst Du dann auch eigene Controls, Methoden, ... unterbringen, die Du dann sowohl in deiner Basisklasse als auch in der davon abgeleiteten WebForm selbst direkt ansprechen kannst.

    namespace Basisklassen
    {
        public class MyPage : System.Web.UI.Page
        {
            public void fuellen()
            {
                (TextBox)this.FindControl( "TextBox1" ).Text = "NeuerText";
            }
     
            public string Text1()
            {
                return "Hallo Welt";
            }
     
            public string Text2()
            {
                return "Hallo Welt, die zweite";
            }
        }
    }
    

    Du würdest hier also deine WebForm von Basisklassen.MyPage ableiten. Wenn deine WebForm ein Control "TextBox1" vom Typ "TextBox" hat, kannst Du über die Methode "fuellen" diese mit einem Text versehen.

    b) Du erstellst innerhalb der WebForm eine Instanz einer Klasse, die die Methoden und/oder Eigenschaften für die Texte bereitstellt. Der Weg wäre dann andersrum als von dir angedacht, die Controls holen sich ihre Texte also von der Instanz der neuen Klasse.

    Dazu kannst Du auch die obige Basisklasse verwenden und dann in deiner WebForm bspw. per:

    this.Textbox1.Text = this.Text1();
    this.Button1.Text = this.Text2();

    die Texte zuweisen.

    Da ich das jetzt nur schnell dahingeschrieben habe, könnten sich noch Fehlerchen im Code verstecken^^ Der weg sollte aber klar sein.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort vorgeschlagen Horizon_Net Dienstag, 20. März 2012 17:32
    • Als Antwort markiert romego57 Donnerstag, 22. März 2012 21:34
    Dienstag, 20. März 2012 16:57
    Moderator
  • Hi Stefan,

    vielen Dank für die ausführliche Antwort. Hat mir geholfen und ich sehe klarer.

    Beste Grüße

    romego57

    • Als Antwort markiert romego57 Montag, 2. April 2012 18:43
    Donnerstag, 22. März 2012 21:15