387 Stimmen

CS0120: Ein Objektverweis ist für das nicht statische Feld, die Methode oder Eigenschaft 'foo' erforderlich.

Bitte beachten Sie:

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //int[] val = { 0, 0};
            int val;
            if (textBox1.Text == "")
            {
                MessageBox.Show("Geben Sie eine Zahl ein");
            }
            else
            {
                val = Convert.ToInt32(textBox1.Text);
                Thread ot1 = new Thread(new ParameterizedThreadStart(SumData));
                ot1.Start(val);
            }
        }

        private static void ReadData(object state)
        {
            System.Windows.Forms.Application.Run();
        }

        void setTextboxText(int result)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new IntDelegate(SetTextboxTextSafe), new object[] { result });
            }
            else
            {
                SetTextboxTextSafe(result);
            }
        }

        void SetTextboxTextSafe(int result)
        {
            label1.Text = result.ToString();
        }

        private static void SumData(object state)
        {
            int result;
            //int[] icount = (int[])state;
            int icount = (int)state;

            for (int i = icount; i > 0; i--)
            {
                result += i;
                System.Threading.Thread.Sleep(1000);
            }
            setTextboxText(result);
        }

        delegate void IntDelegate(int result);

        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}

Warum tritt dieser Fehler auf?

Ein Objektverweis ist für das nichtstatische Feld, die Methode oder die Eigenschaft 'WindowsApplication1.Form1.setTextboxText(int) erforderlich

5voto

Machen Sie die Funktion statisch. Dies sollte Ihr Problem lösen.

4voto

Ich habe diesen Fehler tatsächlich bekommen, weil ich InnerHtml auf Inhalte überprüft habe, die dynamisch generiert wurden - d.h. ein Steuerelement, das runat=server ist.

Um das zu lösen, musste ich das "static" Schlüsselwort meiner Methode entfernen, und dann hat es funktioniert.

4voto

Dean P Punkte 1233

Die Essenz und die Lösung für dein Problem sind wie folgt:

using System;

namespace myNameSpace
{
    class Program
    {
        private void method()
        {
            Console.WriteLine("Hallo Welt!");
        }

        static void Main(string[] args)
        {
            method();//<-- Compile-Zeitfehler, weil eine Instanz der Program-Klasse nicht existiert
            Program p = new Program();
            p.method();//Jetzt funktioniert es. (Du könntest auch method() statisch machen, um es zum Laufen zu bringen)
        }
    }
}

3voto

Aus meiner Sicht geben Sie einem Textfeld einen Nullwert und geben ihn in einer ToString()-Methode zurück, da es sich um eine statische Methode handelt. Sie können es durch Convert.ToString() ersetzen, das einen Nullwert ermöglichen kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X