0

だから、私のC#プログラムにはこの素晴らしいpictureBox1があります。5 秒ごとに、次のような時間メソッドを呼び出します。

public Form1()
{
    InitializeComponent();
    aTimer = new System.Timers.Timer(10000);
    aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
    aTimer.Interval = 2000;
    aTimer.Enabled = true;
}

private static void OnTimedEvent(object source, ElapsedEventArgs e)
{ 
}

取得した pictureBox オブジェクトのプロパティを変更しようとしています。しかし、そうしようとすると次のエラーが発生します。

エラー 1 非静的フィールド、メソッド、またはプロパティ 'Simma.Form1.pictureBox1' にはオブジェクト参照が必要です C:\Users\John\Desktop\Simma\Simma\Form1.cs 39 13 Simma

ただし、pictureBox1 は Public に設定されています。

4

1 に答える 1

1

問題は、あなたが私たちに示していないコードにあるに違いありません...おそらくOnTimedEvent.

最も簡単な修正は、OnTimedEvent代わりにインスタンス メソッドを作成することです。これはアクセシビリティの問題ではありません (フィールドは public であってはなりません。private にしてください!)静的メソッドからインスタンスフィールドを使用しようとすることの問題です。

ただし、非 UI スレッドから UI 要素にアクセスしようとしないでください現在、タイマーは別のスレッドでイベントを発生させるため、クロススレッドの問題が発生します。

これに対する最も簡単な修正は、 のSystem.Windows.Forms.Timer代わりにを使用することSystem.Timers.Timerです。

于 2012-08-29T20:51:44.930 に答える