私はC#の学習に関する本をフォローしようとしていますが、つまずきに遭遇しました。画面上を4匹の犬が走る、レーストラックの模倣機であるアプリを作成することになっています。犬をトラック上で動かすメカニズムを除いて、ほとんどが機能しています。したがって、最初に、Greyhoundクラスを別のクラスファイルで宣言します。
public class Greyhound
{
public int StartingPosition;
public int RaceTrackLength;
public PictureBox MyPictureBox = null;
public int Location = 0;
public int Lane = 0;
public Random Randomizer;
public void Run() //Makes the dog move down the track.
{
Location += Randomizer.Next(0, 4);
MyPictureBox.Location = new Point(Location, Lane);
}
}
次に、form1.csに、オブジェクトを初期化するための次の2つのビットがあります。
public void LoadDogs()
{
Greyhound Dog1 = new Greyhound()
{
StartingPosition = 30,
MyPictureBox = pictureBox2, //Pointer at the picture box for this dog.
Location = 30, //X cordinates of the picture box
Lane = 21 //Y cordinates of the picutre box
};
}
public Form1()
{
InitializeComponent();
LoadDogs();
}
私が遭遇している問題は、オブジェクトの初期化を中断せずにDog1.Run()を実際に機能させることができないことです。
Dog1.Run()をtimer1_Tickイベント内に配置しようとすると、「「Dog1」という名前は現在のコンテキストに存在しません」というメッセージが表示されます。
インスタンス化「GreyhoundDog1=new Greyhound()......」をメソッドの一部ではなくメインエリア内に配置すると、これを修正できます。しかし、参照しようとしているピクチャーボックスに関するエラーメッセージが表示されます。「フィールド初期化子は、非静的フィールド、メソッド、またはプロパティ'DayAtTheTrack.Form1.pictureBox2'を参照できません。」
C#でスコープがどのように処理されるかは、まだ少し混乱しています。