0

私は次のコードを持っています。これは、単一のテキストボックスを含むフォームです。私がmyTimer_Tick静的にしない場合、それはうまく機能します-なぜですか?

namespace Ariport_Parking
{
  public partial class AirportParking : Form
  {

    //instance variables of the form
    static Timer myTimer;


    public AirportParking()
    {
        InitializeComponent();
        keepingTime(5000);
        txtMessage.Text = "hello";
    }

    //method for keeping time
    public void keepingTime(int howlong) {

        myTimer = new Timer();
        myTimer.Enabled = true;
        myTimer.Tick += new EventHandler(myTimer_Tick);
        myTimer.Interval = howlong;

        myTimer.Start();

    }

    static void myTimer_Tick(Object myObject,EventArgs myEventArgs){
        myTimer.Stop();
        txtMessage.Text = "hello world";
    }

  }

}
4

2 に答える 2

5

エラーは、txtMessageにアクセスできないことだと思います。txtMessage はフォームで宣言されたインスタンス変数です。静的メソッドはフォームのインスタンス データにアクセスできません。そして、グーグルで理由を知ることができます。

于 2012-04-12T12:03:42.320 に答える
1

txtMessage は静的ではないため、アクセスするにはクラスのインスタンスが必要です。myTimer_Tick とタイマーを静的にする必要はありません。または、myTimer_Tick の代わりに lambda を使用することをお勧めします。

それ以外の:

myTimer.Tick += new EventHandler(myTimer_Tick);

使用する

myTimer.Tick += (sender, e) => { 
    myTimer.Stop();
    txtMessage.Text = "hello world";
};
于 2012-04-12T12:10:14.360 に答える