Benutzer mit den meisten Antworten
Methode der ClassB soll TextBox aus ClassA füllen

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
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
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 -
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
-
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