Laden...

Wie kann man auf Textbox zugreifen ?

Letzter Beitrag vor 15 Jahren 12 Posts 3.587 Views
Wie kann man auf Textbox zugreifen ?

Ich habe mich bis jetzt nur mit VB und in C# mit COnsolenanwendungen beschäftigt. Nun wollte ich aber auch eine Grafische Oberfläche erstellen und habe dazu einmal eine TextBox auf die Form1 gezogen und unter Eigenschaften den Modefizier auf public gesetzt. Abe ich kann noch immer nicht daraf zugreifen. Ich habe schon das openbook dazu durchstöbert, finde aber nicht wirklich eine Beschreibung, wie man auf die Objekte zugreifen kann.

Mein Beispielprogramm besteht im Momebt aus zwei Klassen (beispiel123 und confParser) welche sich im selben Namespace befinden. In beispiel123 wird eine Form instanziiert ("Form1") und im confParser möchte ich jetzt auf (zum Beispiel) ein Label Feld in Form1 zugreifen.... wie kann ich dies machen ?!

mfg
donchris

Hallo

Was meinst du mit zugreifen? Von wo und wer? Man sollte die controls nicht public machen.

chrische

Mit zugreifen meine ich einfach den Text ändern.

Wenn man unter VB ein Label Feld hat, kann ich einfach mit dessen Namen.Text den Text ändern. Unter C# funktioniert dies aber nicht wirklich.

Man sollte die controls nicht public machen.

Kann ich mich nur anschließen.

Ich denke dein Problem ist, dass du versuchst über die Klasse dein Label zu ändern. Das geht aber nicht, du brauchst eine Instanz dein Form, dann kannst du auch auf auf Properties usw. zugreifen.

Angenommen das Label ist noch auf public.


Form1 form1 = new Form1();
form1.label1.Text="text";

Chris

beispiel123 wird eine Form instanziiert ("Form1") und im confParser möchte ich jetzt auf (zum Beispiel) ein Label Feld in Form1 zugreifen.... wie kann ich dies machen ?!

garnicht am besten. es passt ganz gut zu
[FAQ] Kommunikation von 2 Forms

Wie JAck30lena schon sagt: Siehe [FAQ] Kommunikation von 2 Forms mit den dort genannten Verweisen. Bitte beachte: Auch Formulare sind Klassen, die Zusammenarbeit zwischen einem Formular und einer "sonstigen" Klasse geht also nach ähnlichen Regeln.

In beispiel123 wird eine Form instanziiert ("Form1")

Das ist so vermutlich nicht korrekt beschrieben. Oder ist beispiel123 die Program-Klasse?

Übrigens gehören Bezeichner wie Form1 und beispiel123 verboten. Da weißt auch Du nach spätestens 14 Tagen nicht mehr, was das soll. Bitte unbedingt sprechende Bezeichner verwenden!

Jürgen

Das Problem ist ja, dass ich ja nicht einmal aus der Klasse selber auf das Label-Feld zugreifen kann.

Angenommen es gibt eine Klasse und man zieht auf die Standardform Form1 per Drag&Drop ein Label:

static class Program
    {
        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]


        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Form Form1 = new Form1();
            Application.Run();

            Form1.label1.Text = "";
        }
    }

Dann bekomme ich folgende Fehlermeldung:
Fehler 1 "System.Windows.Forms.Form" enthält keine Definition für "label1", und es konnte keine Erweiterungsmethode "label1" gefunden werden, die ein erstes Argument vom Typ "System.Windows.Forms.Form" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Users\chris\Documents\Visual Studio 2008\Projects...........\Program.cs 24 19 openApatcheadmin

hier versuchst du nciht aus der klasse selbst darauf zuzugreifen, sondern du versuchst in diesem code aus der klasse "Programm" darauf zuzugreifen, was aufgrund vom zugriffsmodifizierer nciht erlaubt ist.

Hi!

Verwendest du VisualStudio?

Da kannste eine WindowApplication erstellen, und kriegst gleich ein leeres Form zu Gesicht. Da machstenen Button drauf, und dann DoppelKlick auf den Button.
Dann biste im Code-Editor des Forms, im ClickEvent des Buttons. Hier kannste auch auf die Textbox zugreifen (wenn es denn eine solche schon gibt).
Bei WinApps programmiert man fast nix in class Program.
Ich hoffe, du kennst auch schon den Projekt-Explorer, dort knnste auch den UserCode-Bereich des Forms betreten, nämlich per Contextmenu.

Wenn dir das alles neu ist, sollteste ein kluges Buch zu Rate ziehen, wo drinne steht, wie man die IDE nutzt. Wenn das nicht drin steht - Buch wegwerfen.

Der frühe Apfel fängt den Wurm.

Versuche mal folgendes:


    ...
    Form1 form = new Form1(); //Hier die Variable der Klasse Form1 deklarieren, Form kennt label 1 nicht!!!
    // Vor dem Run ausführen, sonst wird die Zeile erst nach dem Schlißen 
    //des Formulars ausgeführt (Run blockiert). Und label1 muss public sein 
    //(nicht schön, aber zum Testen lass es erstmal so.)
    form.label1.Text = ""; 
    Application.Run(form); //Hauptformular übergeben
    ...

Das Problem ist ja, dass ich ja nicht einmal aus der Klasse selber auf das Label-Feld zugreifen kann.

"Die Klasse selber" ist die Klasse, in der das Label deklariert ist, also Form1 und nicht Program. Du willst aber aus Program heraus auf Form1.Label zugreifen; das soll nicht sein (Label ist private). Wenn das unbedingt nötig ist (ich kann mir hier keinen Grund denken, aber in anderen Fällen schon), dann mach im Formular (!) eine Eigenschaft, über die der Label.Text gesetzt wird:

//  im Formular
public string LabelText {
   get  { return label1.Text; }
   set  { label1.Text = value; }
}

Aber das Ganze geht sehr in Richtung fehlende Grundlagen.

Fehler 1 "System.Windows.Forms.Form" enthält keine Definition für "label1", [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

Falsche Verwendung von Namen der Klassen und Instanzen:

//  falsch:
            Form Form1 = new Form1();
//  richtiger:
            Form1 form = new Form1();
//  noch besser:
            MainForm main = new MainForm();
//  weiter geht es in der Regel so:
            Application.Run(main);

In 🛈 findest Du wirklich Informationen dazu; Du musst nur schrittweise vorgehen. Jürgen

Danke für die vielen Antworten. Ihr konntet mein Problem lösen !

thx
donchris