Announcement

Collapse
No announcement yet.

Zusammenhang program.cs und form1.cs

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

  • Zusammenhang program.cs und form1.cs

    Hallo,

    bin bei meiner Suche im Internet nicht ganz auf eine Antwort gestoßen.

    Wie hängen die program.cs und die form1.cs miteinander zusammen? Habe in der program.cs eine andere Klasse instanziiert und möchte nun aus der Form1.cs drauf zugreifen, bzw. die Textfields der Form1.cs mit Werten aus Variablen dieser Instanz füllen. Geht das irgendwie??

    Oder instanziiere ich die andere Klasse gleich in Form1.cs und kann daduch darauf zugreifen?

    Hoffe, meine Frage ist verständlich... habe kleines Verständnisproblem zum Aufbau von C#-Programmen generell...

    Welcher Code/Elemente kommen in die Program.cs und welcher in die Form1.cs?

    Grüße

  • #2
    Hallo,

    Originally posted by aircraft_no5 View Post
    Wie hängen die program.cs und die form1.cs miteinander zusammen?
    Es ist "allgemein üblich", das Hauptprogramm in die Klasse Program mit der Datei program.cs zu legen. Wichtig ist, dass die Main-Methode genau einmal im ganzen Programm (d.h. in allen Assemblies zusammen) existiert. Damit man sich da nicht vertut, steht sie eben an einer Stelle, die sozusagen Standard ist.

    Diese Methode führt Standardmaßnahmen aus (z.B. Prüfung, ob es sich um die einzige Instanz des Programms handelt, oder eine Passwort-Abfrage) und startet dann das Hauptfenster durch Application.Run(). Es ist übrigens nicht immer sinnvoll, das Hauptfenster direkt erstellen zu lassen; auch so etwas ist oft nützlich:
    [highlight=c#]MainForm main = new MainForm();
    main.SetUserName(user); /* nämlich als Ergebnis der Passwort-Abfrage */
    Application.Run(main);[/highlight]
    Habe in der program.cs eine andere Klasse instanziiert und möchte nun aus der Form1.cs drauf zugreifen, bzw. die Textfields der Form1.cs mit Werten aus Variablen dieser Instanz füllen. Geht das irgendwie??
    Es geht nicht durch Rückgriff von Form1 auf Program. Es geht nur dadurch, dass du dem Formular eine Referenz auf diese Zusatzklasse übergibst, ähnlich wie ich in dem Beispiel gerade eben den Nutzernamen dem Hauptformular bekanntgegeben habe, oder indem du analog die Einzelinformationen an das Formular übergibst.

    Oder instanziiere ich die andere Klasse gleich in Form1.cs und kann daduch darauf zugreifen?
    Das ist in aller Regel unbedingt vorzuziehen. Ein abweichendes Verfahren ist u.U. sinnvoll, wenn diese Instanz noch anderweitig benötigt wird; aber das können wir im Moment ignorieren.

    Welcher Code/Elemente kommen in die Program.cs und welcher in die Form1.cs?
    Program-Klasse: ausschließlich die Main-Methode und Punkte, die unmittelbar dazu gehören, sowie Erzeugung und Aufruf von MainForm.
    Formular-Klasse: ausschließlich die GUI-Elemente.
    Andere Elemente (Instanzen weiterer Klassen) werden dort erzeugt (also deklariert und instanziiert), wo sie benötigt werden.

    Übrigens gehören Namen wie Form1 verboten, siehe auch NET: Richtlinien für Namen.

    Ich hoffe, es ist jetzt klarer. Jürgen

    Comment


    • #3
      hallo,

      vielen dank für die antwort, soweit ist alles klar. ich kann aber irgendwie nach erstellung der instanz von meiner klasse in form1(hab es nur so genannt, damit es klar wird, um welche datei es sich handelt), nicht auf die getter und setter des objektes zugreifen. wieso?!?

      mensch, da ist java aber bissle leichter... auch wenn es unübersichtlicher wird...

      Comment


      • #4
        mensch, da ist java aber bissle leichter... auch wenn es unübersichtlicher wird...
        An der Stelle sollten Java, C# und jede andere OO-Sprache sich gleich verhalten. Wenn eine Instanz ein anderes verwenden will braucht es eine Referenz auf diese.

        Wenn du also aus deiner Programm Klasse eine Form1 Klasse erzeugst und noch eine weitere Instanz einer anderen Klasse, nennen wir sie mal class1, dann kennen sich class1 und Form1 nicht, woher sollten sie auch? Nur Programm kennt Form1 und class1. Wenn du beim Erzeugen nichts besonderes gemacht hat gilt nicht mal der umgekehrte Weg. Heißt Form1 und class1 kennen Programm nicht.

        ich kann aber irgendwie nach erstellung der instanz von meiner klasse in form1(hab es nur so genannt, damit es klar wird, um welche datei es sich handelt), nicht auf die getter und setter des objektes zugreifen. wieso?!?
        So wie ich dich verstehe solltest du nicht mal auf Objekt zugreifen können da du keine Referenz auf das Objekt hast.(Du kennst vielleicht die Klasse aus der Objekt entstanden ist hilft dir aber nicht um Objekt auch zu benutzen) Sorge dafür das die Instanz die eine andere benutzen will auch eine Referenz auf eben diese Klasse bekommt.

        Die Referenz kannst du per Konstruktor übergeben, über eine Property, Methode oder sonst wie. Oder eine der Klassen erzeugt die andere Klasse die es braucht und merkt sich einfach was es da gerade erzeugt hat.

        Comment


        • #5
          Originally posted by aircraft_no5 View Post
          ich kann aber irgendwie nach erstellung der instanz von meiner klasse in form1..., nicht auf die getter und setter des objektes zugreifen. wieso?!?
          Da fehlen Informationen, also insb. Code-Ausschnitte sowohl für das Erstellen der Instanz als auch für den Zugriff sowie die Definition von Getter und Setter.

          (hab es nur so genannt, damit es klar wird, um welche datei es sich handelt)
          Ich wollte auch nur "vorsorglich" auf sinnvolle Namen hinweisen.

          mensch, da ist java aber bissle leichter... auch wenn es unübersichtlicher wird...
          Kann ich nicht beurteilen, ich kenne Jave nicht. Aber ich gehe davon aus, dass beide Sprachen ihre Vor- und Nachteile haben (ganz abgesehen von den unterschiedlichen Zielsetzungen).

          Gruß Jürgen

          Comment


          • #6
            Und generell zu empfehlen:

            http://openbook.galileocomputing.de/csharp/

            Kann man hier nicht oft genug reinschreiben.

            Comment

            Working...
            X