Access class from another form

前端 未结 3 1809
逝去的感伤
逝去的感伤 2020-12-20 02:48

I\'m struggling to get a class from a different form without making it static, here\'s what I want to do:

//First form
public partial class SetupScreen : For         


        
相关标签:
3条回答
  • 2020-12-20 03:22

    you must use singleton pattern. so your code must be like this:

    //First form
    public partial class SetupScreen : Form
    {
     public static SetupScreen setupScreenFrm;
     Control myObject;
     public Battleship myBattleship;
    
     public SetupScreen()
     {
        setupScreenFrm=this;
        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
        SetupScreen ssFrm=SetupScreen.setupScreenFrm;
        myBattleship = ssFrm.myBattleship;
     }
    }
    

    and first of all, in the start of your app, create an instant of SetupScreen form.

    now you can access to SetupScreen in anywhere.

    0 讨论(0)
  • 2020-12-20 03:41

    You are getting this error because you are trying to access a non-static field in a static manner.

    Where do you instantiate SetupScreen and GameScreen?

    Why not something like this:

    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;
    
        }
    }
    

    Of course, this will only work if you can instantiate GameScreen in SetupScreen. I could give you a better answer if you tell me where/how you are "launching" these forms.

    0 讨论(0)
  • 2020-12-20 03:41

    You could pass a reference of your first form to your second form, or (what I would do), create a public Battleship property on your second form and pass your object that way.

    //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();
        }
    }
    
    0 讨论(0)
提交回复
热议问题