Zugriff auf Variable

Baste

Mitglied
Hi @ all. Ich hab mal wieder ein kleines Problemchen....
Ich erzeuge mir in einer Funktion dynamisch diverse Textboxen. In dieser Textbox steht dann ein Name. Code:

Code:
private void createTextBox(ref TBSuche tbsuche, SqlDataReader reader, int x)
    {
    ...
//TextBox zur Anzeige des Namens
            int i;
            for (i = 0; i < nameTable.Rows.Count; i++)
            {
                TextBox name;
                name = new TextBox();
                name.Text = ("Name:  " + ((newrow.ItemArray[0]).ToString()) + ", " + ((newrow.ItemArray[1]).ToString()));
                name.ReadOnly = true;
                name.BorderStyle = BorderStyle.None;
                name.Font.Name = "Arial";
                name.Width = 300;
                Page.Form.Controls.Add(name);
            }
     }

Nun möchte ich in einer anderen Funktion mit einem Streamwriter diese Daten als html-File an mein Festplatte senden. Code:

Code:
private void senden()
    {
        StreamWriter sw = new StreamWriter("c:\\mail.html");

        sw.WriteLine(this.name.Text);
        sw.Close();
    }

Allerdings wird die Variable "name" nicht erkannt, da diese ja eine lokale Variable aus der anderen Funktion ist. Wie könnte ich dieses Problem lösen, damit ich auf diese Variable zugreifen kann?

Danke.
Gruß Baste
 
Hi,


wenn du dem "name" noch eine ID verpasst, dann könntest du z.B. mithilfe von this.FindControl("nameID") dein Objekt finden und ihn ansprechen.

für ein TextBox währe es ung. so: sw.WriteLine(((TextBox)this.FindControl("nameID")).Text);
 
Zuletzt bearbeitet:
Hi,
danke für die schnelle Antwort. Aber so richtig funktioniert es noch net.

Hab "name" eine ID verpasst.
Code:
Code:
TextBox name;
name = new TextBox();
name.ID = "name_alt";

Und dann in der Funktion senden() deinen Code eingebaut.
Code:
Code:
StreamWriter sw = new StreamWriter("c:\\mail.html");
sw.WriteLine(((TextBox)this.FindControl("name_alt")).Text);

Dann kommt die Fehlermeldung: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

Was könnte da noch fehlen?

Danke.
 
Control.FindControl erwartet den Namen des Controls. Und wenn Du keinen vergibst ist es klar,
dass kein Control gefunden werden konnte. ;)
C#:
TextBox textBox = new TextBox();
textBox.Name = "TextBox" + nameTable.Rows.Count.ToString();
textBox.Text = "Name:  " + newrow.ItemArray[0].ToString() + ", " + newrow.ItemArray[1].ToString();
Ausserdem sind Aufrufe von Eigenschaften während einen Castings Schwachsinn.
Was ist wenn der Typ des Controls keine TextBox ist oder wie in deinem Fall gar keines vorhanden ist?
Falsch:
C#:
sw.WriteLine( (TextBox)this.FindControl("name_alt").Text );
Richtig:
C#:
TextBox textBox = this.FindControl( "TextBox0" ) as TextBox;
if ( textBox != null ) {
        sw.WriteLine( textBox.Text );       
}
 
Ohh ja sorry, ich hab übershen das wir hier im .NET Web und Kommunikation Forum sind. :-(
Da musst anstatt Control.Name (ist nur bei System.Windows.Forms verfügbar)
Control.ID (System.Web.UI.WebControls) verwenden.

Btw. Und ihr könnt mich ruhig cosmo nennen. :)
 
Ohh ja sorry, ich hab übershen das wir hier im .NET Web und Kommunikation Forum sind. :-(
Da musst anstatt Control.Name (ist nur bei System.Windows.Forms verfügbar)
Control.ID (System.Web.UI.WebControls) verwenden.

Btw. Und ihr könnt mich ruhig cosmo nennen. :)

nicht schlimm, Cosmo :) kann passieren.

Bastle, was es noch sein kann, ist, dass dein Objekt zwar erstellt wurde, aber der Server noch nichts davon weiss. Ich bin mir aber nicht 100% sicher. Ich habe auch Probleme mit TextBoxen.Text. Bei mir werden die Textänderungen auch irgendwie nicht übernommen.
 
Oh man, du hast recht. Hier mein fehler:

Code:
if (!Page.IsPostBack)
        {
            suchen(this, new EventArgs());
            addSubmitButton();
        }
        else
        {
            senden();
        }

Das kann dann natürlich nicht funktionieren ;)

Danke.
 
Zurück