Announcement

Collapse
No announcement yet.

Zugriff auf Controls einer anderen Form oder aus einer anderen Klasse heraus (C#)

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

  • Zugriff auf Controls einer anderen Form oder aus einer anderen Klasse heraus (C#)

    Hi!<br><p>

    Ich habe folgendes Problem.<br>
    Ich versuche aus einer eigenen Klasse FooBar heraus auf einen progressBar
    von Form1 zuzugreifen, um den Value zu ändern. Die Klasse FooBar und Form1
    sind im selben Namespace.<br>
    Wie kann ich das machen? Gibt es da eine einfache Möglichkeit, oder ist daskomplizierter?<br>
    Ich komme aus der Delphi-Ecke und da ist das überhaupt kein Problem, daher
    verwundert es mich schon, dass ich da noch keine Lösung gefunden habe, die
    auch elegant ist.<br><p>
    Ich hatte das ganze auch mit 2 Forms probiert: Nämlich von Form2 aus auf den ProgressBar von Form1 zuzugreifen. Aber auch dieses ohne Erfolg.
    <p>
    Über Vorschläge, Samples oder Sources wäre ich sehr dankbar..
    <p>
    Gruss
    Stefan Kugele
    ([email protected])

  • #2
    Hi,

    welche Fehlermeldung kommt denn genau? Die Klassen müssen nicht unbedingt im selben Namespace liegen - wichtiger ist, wo die Objektinstanz des Forms liegt. Da C# keine globalen Variablen und Funktionen kennt, muss die Variable für dein Form in eine Klasse liegen.

    <pre>
    public class MyForm : Form {
    <b>public</b> ProgressBar pg;
    // ...
    }
    public class WichtigesObjekt {
    private MyForm frm;
    WichtigesObjekt(MyForm frm) {
    this.frm = frm;
    // mache etwas mit diesem Fenster
    }
    // ...
    }
    public class ConsoleProgram {
    public static void Main() {
    MyForm frm = new MyForm();
    wichtigesObjekt obj = new wichtigesObjekt(frm);
    obj.wichtigeMethode();
    // ...
    }
    }
    </pre>

    Das könnte sogar so funktionieren. Dein Objekt benötigt nur eine Instanz deines Fensters (möglich wäre hier auch nur ProgressBar zu übergeben). Auch wenn dies kein gutes Code-Design ist.

    Idealerweise sollte man Klassen schreiben, die man möglichst oft wiederverwendet werden kann, was in meinen Beispiel nicht der Fall ist.

    Gru&#223

    Comment


    • #3
      Hallo,
      ich möchte Jörgs Kommentar einen kleinen Designvorschlag hinzufügen:

      Verpasse Deiner Klasse FooBar eine abstrakte Superklasse (für Wiederverwendung), die Events à la 'StepFinished' feuern kann.

      Erstelle eine Klasse die von Progressbar erbt und der sich als Listener bei einem Object Deiner Klasse anmelden kann und auf StepFinished-Events reagiert. (Nicht vergessen Dispose zu überschreiben, um sich wieder abzumelden, sonst gibt es lustige Abstürze).

      Gruß

      Thoma

      Comment


      • #4
        Hallo Thomas,
        dann müsste man in dem Ereignis aber ein modales Fenster öffnen, da ja auf die Eingabe von Benutzerdaten gewartet werden muss - d.h. das Event darf erst nach Abschluß der Benutzereingaben beendet werden. Außerdem erhält man dadurch eine Querverbindung (mit möglichen Nebeneffekten) mehr.

        Müsste man nun fallweise abwägen, was in dem Projekt sinnvoll ist

        Comment


        • #5
          Hi Jörg,
          von modalen Dialogen stand da doch nix, oder? Ich weiß aber was Du meinst, den Fall hatten wir auch schon.

          Bezüglich der zusätzlichen Querverbindung ist das IMO unproblematisch, da hier ja ein technisches Interface verwendet wird. Theoreitsch könnten beliebig viele Prograssbars auf einen Ablauf horchen.

          Wenn es umgekehrt sein soll, dass ich den Fortschritt mit der Möglichkeit des Benutzer-Abbruchs visualisieren möchte, muss man da etwas anders herangehen.

          Gruß

          Thoma

          Comment

          Working...
          X