Announcement

Collapse
No announcement yet.

Newbie Frage zu Windows Forms

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

  • Newbie Frage zu Windows Forms

    Hallo,

    wenn ich mit Visual C# Express eine Windows Application erstelle, werden mir ja zwei Klassen generiert:

    - programm.cs
    - form1.cs (aufgeteilt in form1 und form1.designer)

    Aus programm.cs wird mit

    [highlight=c#]
    static void Main()
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(fals e);
    Application.Run(new Form1());
    }
    [/highlight]

    die Applikation (Nachrichtenschleife) gestartet und das Fenster generiert. Gibt es eine Möglichkeit direkt von programm.cs auf form1 und deren Elemente zuzugreifen. Z.B. das ändern einer Textbox aus programm.cs:

    [highlight=c#]
    static class programm {

    [STAThread]

    static void Main()
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(fals e);
    Application.Run(new Form1());

    Form1.textbox1.Text = "Hallo Welt!";
    }
    [/highlight]

    Mir ist zwar klar, dass eine Windows-Applikation event-basiert sein soll, wie aber mache ich es, wenn programm.cs Daten von einer Drittanwendung erhält die in form1 angezeigt werden sollen?

    Danke schonmal und Grüße.

  • #2
    Hallo,
    1. Formatiere den Code bitte mit [highlight=c#]dein Code[/highlight]
    2. du kannst den Konstruktor der Form überladen und somit der Form den Titel mitgeben
    3. du kannst in der Form eine Eigenschaft haben die den Titel entgegen nimmt und den Titel der Form setzt - die Deklaration von "Elementen" der Form als public wäre auch möglich, entspricht aber nicht dem objektorientierten Programmieren


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Danke für die schnelle Antwort.

      1. erledigt

      Okay. Ich kann ja auch eine public-Method in form1.cs deklarieren, die den Text einer textbox setzt (oder was auch immer). Ich bekomme aber darauf keinen Zugriff, weil - aus meinem Verständnis heraus - ich das Object form1 ja nicht adressieren kann.

      In wie weit würde mir eine Form mit Titel hier weiterhelfen. Könnte ich im Konstruktor eine Referenz auf program.cs übergeben und der Konstruktor übergibt wiederum eine Referenz von form1 an program.cs ... hört sich irgendwie nicht schön an.

      Comment


      • #4
        Es hindert dich auch keiner daran den Quelltext in program.cs anzupassen, und dir eine entsprechende Variable anzulegen. Außerdem bietet sich hier gleich mal die Verwendung von using an.
        Code:
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        using (Form1 locForm = new Form1())
        {
          locForm.Caption := "Hallo Welt!";
          Application.Run(locForm);
        }

        Comment


        • #5
          Der Punkt 2 von Gü würde etwa so aussehen (Bezeichner wie Form1 gehören sich nicht):
          [highlight=C#]// in der Form-Klasse
          public MainForm(string title) : this()
          {
          Text = title;
          }

          // in der Main-Methode
          Application.Run(new MainForm("Ich brauche Hilfe"));[/highlight]

          Der Punkt 3 von Gü würde etwa so aussehen:
          [highlight=C#]MainForm form = new MainForm();
          // zusätzliche public-Methode, die einen Text übernimmt (siehe Gü's Hinweis)
          form.SetText("Ich brauche Hilfe");
          Application.Run(form);[/highlight]
          Dieses Verfahren ist durchaus nützlich und zu empfehlen, wenn z.B. im Zusammenhang mit einem Login-Verfahren Vorarbeiten nötig sind, bevor das Hauptfenster aufgerufen wird.

          Jürgen

          Comment


          • #6
            Jo, danke.

            Originally posted by MAC View Post
            Es hindert dich auch keiner daran den Quelltext in program.cs anzupassen, und dir eine entsprechende Variable anzulegen. Außerdem bietet sich hier gleich mal die Verwendung von using an.
            Code:
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            using (Form1 locForm = new Form1())
            {
              locForm.Caption := "Hallo Welt!";
              Application.Run(locForm);
            }
            Oh mann. Ja, dann doch ziemlich offensichtlich. Danke!

            Comment

            Working...
            X