Steuerelement in einer Klasse verwenden

  • Normalerweise ist die Klasse nich dazu da um auf die GUI zuzugreiffen.
    Aber das Design überlasse ich dir mal. ;)


    Du kannst in einer Funktion die ListBox als ref Parameter angeben und so dann darauf zugreiffen.
    [CSHARP]public void foo(ref System.Windows.Forms.ListBox _plb) { _plb.Items.Add("foo"); }[/CSHARP]

  • Ich habe es mal anders gemacht:
    public static SilkProxy MainWindow = new SilkProxy();


    somit kann ich dann z.b. über SilkProxy.MainWindow.button etc.... etwas machen


    sobald ich aber die funktion in eine klasse einbaue bleibt er an der stelle hängen

  • In der Klasse
    [cs]
    public delegate void dInfo(string s);
    public event dInfo OnInfo;
    [/cs]
    und wenn du dann einen Listbox Eintrag hinzufügen willst, einfach
    [cs]
    OnInfo("Meine Notiz");
    [/cs]
    aufrufen.


    Und in der Form Klasse dann
    [cs]
    meinObjektMeinerKlasse.OnInfo += (hier einfach 2 mal Tab drücken, VS macht den Rest)
    [/cs]
    dann macht VS eine neue Methode in der du das Event weiterverarbeiten kannst. In dem Event dann einfach
    [cs]
    listBox1.Invoke((MethodInvoker)delegate
    {
    listBox1.Items.Add(s);
    });
    [/cs]

  • Wenn du schon so mit Globalen Variabeln herumwurstelst dann bitte richtig. ;)


    Du instanzierst MainWindow komplett neu.
    Das heisst wenn du dort etwas veränderst, ist dies auf deiner GUI nicht sichtbar.
    Du musst also zuerst dein GUI dem Objekt zuweisen.


    "Er bleibt an der Stelle hängen" ist nicht wirklich hilfreich. ;)
    Sofern du mehrere Threads hast, könnte das der Fehler sein. Überprüfe die Aktion am besten zuerst auf InvokeRequired, und wenn true dann Invoke das Ganze auch gleich.


    €: Events wären vielleicht auch noch was für dich. ;)
    €2: War wiedermal einer schneller :hmmz: