2016-05-18 5 views
0

私は、基本的なC#のゲームを作成するが、コードだがエラーCS0120:静的でないフィールド、メソッド、またはプロパティ 'MainMenu.timer1'にオブジェクト参照が必要です。どうすれば修正できますか?

CS0120: An object referenceis required for the non-static field, method or property 'MainMenu.timer1'

このエラーがスローされこれは、コードされています

public void timer1_Tick(object sender, EventArgs e) 
{ 

    if (toolStripProgressBar1.Value <= 100) 
    { 
     toolStripProgressBar1.Value += 1; 
     string 123; 
     123 = label3.Text; 
     int 1, 2, answ; 
     sayi1 = Convert.ToInt32(toolStripStatusLabel1.Text); 
     sayi2 = Convert.ToInt32(123); 
     answ = 1 + 2; 
     string ans; 
     ans = answ.ToString(); 
     toolStripStatusLabel1.Text = ans; 
     external = ans; 
     this.Text = "Game (%" + ans + ") - Wait";  
    } 

    if (toolStripProgressBar1.Value >= 100) 
    { 
     System.Diagnostics.Process.Start(@"bin/MOOperator.exe"); 
     timer1.Stop(); 
     Application.Exit(); 
    } 
} 

注:public static void timer1_Tick(object sender, EventArgs e)ここでタイマー1のコードは

try 
{ 
    Ping myPing = new Ping(); 
    String host = "www.google.com"; 
    byte[] buffer = new byte[32]; 
    int timeout = 4000; 
    PingOptions pingOptions = new PingOptions(); 
    PingReply reply = myPing.Send(host, timeout, buffer, pingOptions); 
} 
catch (Exception) 
{ 
    MessageBox.Show("You aren't connected a internet or connection is to slow. Please check your connection.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
    MainMenu.timer1.Enabled = false; 
} 

です動作しません。

注:

Program p = new Program; p.timer1();

+2

[エラー:「非静的フィールド、メソッド、またはプロパティにオブジェクト参照が必要です...」](http://stackoverflow.com/questions/2505181/error-an-object-reference -is-non-static-field-method-or-propに必要) – Tim

+1

エラーが発生した行はどれですか?その行を含むメソッドが 'static'かどうか質問に関連情報を含めてください。 – David

+0

MainMenu.timer1.Enabled = false; on MainMenu.timer1 –

答えて

0
MainMenu.timer1.Enabled = false; 

おそらくMainMenuクラスない変数です。そのメンバーがstaticでない限り、クラスのメンバーに直接アクセスすることはできません。エラーが示すように、MainMenuを参照する必要があります。クラス自体ではありません。上非staticメンバにアクセス

SomeClass.SomeMember(); 

次のように伝統的な意味では


、差が

直接クラスにstatic部材へのアクセス...示すことができます。 インスタンスクラス:

var someInstance = new SomeClass(); 
someInstance.SomeMember(); 

意味的には、これは非常に重要な違いです。 staticは、何かが動作するまで投げるキーワードではなく、それが適用される基本的な意味を変えます。

意味的な例として、クラスPersonを考えてみましょう。 PersonHairColorなどの情報を尋ねる場合は、のインスタンスが必要です。人の任意の所与のインスタンスは、他のインスタンスとは独立して、独自の髪色を有することができるからである。だからPerson.HairColorに電話することはありません。someInstanceOfPerson.HairColorと呼んでいます。


あなたはここで他の場所で非静的メンバを参照ください:

timer1.Stop(); 

をので、timer1現在実行クラスのメンバーですか?もしそうなら、まさにそれとの整合性:

timer1.Enabled = false; 

このコードはどこかtimer1を定義するクラスの外で(どこか別の場所で実行されている場合そうでない場合、あなたはそのクラスのインスタンスを必要とする詳細を知らずに。あなたのコードは、絶対最も簡単なは、上記のように次のようになります。

しかし
var mainMenu = new MainMenu(); 
mainMenu.timer1.Enabled = false; 

は、私はあなたのMainMenuクラスまたはそのについては何も知りませんメンバー。それはプライベートであるかもしれません、あなたはすでにそのクラスの別のインスタンスを持っていて、新しいクラスで操作したくないかもしれません。

しかし、ポイントは変わりません。あなたはを特定する必要があります。MainMenu(そのインスタンス)を参照してください。あなたは単に一般クラスそのものを参照することはできません。

+0

これは編集に感謝しています –

-2

宣言タイマ1このように動作しません: のpublic staticタイマータイマー1を、

+1

問題を解決するために「静かにする」というアプローチは、一般に解決するよりも多くの問題を作り出します。 – David

+0

ノープは動作していません。 –

+0

@David - Agreed。 'static'はそれを使用していますが、非常に危険なこともあり、追跡して修正するための"面白い "バグがたくさんあります。 – Tim

関連する問題