2

静的にせずに別のフォームからクラスを取得するのに苦労しています。これが私がやりたいことです:

//First form
public partial class SetupScreen : Form
{
    Control myObject;
    public Battleship myBattleship;

    public SetupScreen()
    {
        InitializeComponent();
        //Create Class Object
        myBattleship = new Battleship();
    }
}

//Launch second form 
public partial class GameScreen : Form
{
    Control myObject;
    Battleship myBattleship;
    Battleship fredBattleship;

    public GameScreen()
    {
        InitializeComponent();
        //Get the class
        myBattleship = SetupScreen.myBattleship;
    }
}

「非静的フィールド、メソッド、またはプロパティにはオブジェクト参照が必要です」というエラーが表示され続けます

単一のメソッドだけでなく、フォーム全体からクラスにアクセスできるようにしたいので、面倒なので毎回渡したくありません

消去できないため、クラスを静的にしたくありません。どうすればこれを行うことができますか?

4

3 に答える 3

1

非静的フィールドに静的な方法でアクセスしようとしているため、このエラーが発生しています。

SetupScreen と GameScreen はどこでインスタンス化しますか?

なぜこのようなものではありません:

public partial class SetupScreen : Form
{
    private Control myObject;
    public Battleship myBattleship;
    private GameScreen gameScreen;

    public SetupScreen()
    {
        InitializeComponent();
        //Create Class Object
        myBattleship = new Battleship();
        gameScreen = new GameScreen(this);
    }
}

public partial class GameScreen : Form
{
    private Control myObject;
    private Battleship myBattleship;
    private Battleship fredBattleship;
    private SetupScreen setupScreen;

    public GameScreen(SetupScreen setupScreen)
    {
        InitializeComponent();

        this.setupScreen = setupScreen;
        myBattleship = this.setupScreen.myBattleship;

    }
}

もちろん、これは SetupScreen で GameScreen をインスタンス化できる場合にのみ機能します。これらのフォームをどこでどのように「起動」しているかを教えていただければ、より良い回答が得られます。

于 2013-03-29T01:48:52.773 に答える
1

最初のフォームの参照を 2 番目のフォームに渡すか、(私ならどうするか) Battleship2 番目のフォームにパブリック プロパティを作成し、その方法でオブジェクトを渡すことができます。

//First form
public partial class SetupScreen : Form
{
    Control myObject;
    public Battleship myBattleship;

    public SetupScreen()
    {
        InitializeComponent();
        //Create Class Object
        myBattleship = new Battleship();

        Form gameForm = new GameScreen(); // New form object
        gameForm.MyBattleship = myBattleship; // Set property
        gameForm.Show(); // Show form
    }
}

//Second form 
public partial class GameScreen : Form
{
    Control myObject;
    Battleship fredBattleship;

    public BattleShip MyBattleship { set; get; }

    public GameScreen()
    {
        InitializeComponent();
    }
}
于 2013-03-29T01:51:24.233 に答える