Aus statischer Methode auf die Form zugreifen bzw. Objektverweis der Form übergeben?



  • Hallo

    Ich bin recht neu in der C# Welt und habe ein kleines Problem.
    Ich möchte aus einer statischen Methode auf meine Form zugreifen.
    Dazu brauche ich natürlich einen Objektverweis auf die Instanz der Form. Aber wo bekomme ich den her? wie kann ich den Übergeben?
    Mein code sieht ungefähr so aus:

    namespace WindowsFormsApplication2
    {
        static class Program
        {
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Form1 myForm = new Form1();
                Application.Run(myForm);
            }
        }
    }
    
    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
            string text = "Woher bekomme ich myForm?";
    //myForm ist hier leider nicht bekannt ??????????????
            myMethod(myForm,text);
            }
    
            public static void myMethod(Form1 myForm_übergeben, string text){
    
                myForm_übergeben.TextBox1.Text = text;
            }
        }
    }
    

    Irgendwie muss ich ja jetzt von der Main() Methode das myForm Objekt mit übergeben, damit dieses später bekannt ist.
    Wie mache ich das?

    Beste Grüße



  • mach einfach das "static" weg und gut is

    ansonsten kannste auch "this" schreiben.
    aber wozu "this" explizit übergeben, wenns bei non-static methoden eh implizit übergeben wird?



  • Hi

    Ja, das ist mir schon klar, das das funktioniert wenn ich die Methode nicht statisch mache.
    Aber das muss doch auch für eine statische Methode machbar sein?

    Gruß



  • In button1_Click entspricht "this" dem "myForm" aus Main. Du brauchst da nichts von Main übergeben.



  • Aber in myMethod nicht, da diese Methode statisch ist. Also ist die Frage wie ich das "this" an myMethod übergeben kann????



  • Trunkenbold schrieb:

    Aber in myMethod nicht, da diese Methode statisch ist. Also ist die Frage wie ich das "this" an myMethod übergeben kann????

    Mit myMethod(this, text), wie hustbaer bereits implizierte?



  • Es kommt darauf an, von woher Du MyMethod() aufrufen willst. Deinem Schreien nach soll das aus der Main() heraus passieren.

    Grundsätzlich ist das kein Problem, da Du ja genau da die Instanz von Form1 erstellst. Benutze also

    Form1.MyMethod(MyForm, "Your text");
    

    Ich sehe aber ein Problem darin, dass Application.Run() ein synchroner Aufruf ist, d.h. dass MyMethod() zwar alles mögliche machen kann, aber nichts mehr davon sichtbar ist, weil MyForm bereits nicht mehr sichtbar ist.

    Grundsätzlich aber muss ich meinen Vorrednern insofern zustimmen, als dass es wenig sinnvoll erscheint, in einer Klasse eine statische Methode zu haben, deren einer Parameter eine instanz eben dieser Klasse ist. Denselben Effekt hättest Du mit einer nicht-statischen Methode. Anstatt verschiedener Parameter riefest Du sie halt für verschiedene Instanzen von Form1 auf.

    Ich sehe gerade, der Aufruf soll aus dem Button_Click-Handler heraus erfolgen. An dieser Stelle ist tatsächlich this genau die Instanz von Form1, die Du suchst.


Anmelden zum Antworten