Class 不包含在显示窗体时接受0个参数的构造函数

Class 不包含在显示窗体时接受0个参数的构造函数,class,Class,我有一个rpg游戏,我已经工作了一段时间,我似乎无法得到列表设置。对于我想使用的不同设备,我有不同的课程,我发现很难在这些课程中设置列表,然后从不同的课程调用它,并以我的形式调用组合框。所以我决定从头开始,可能会问一个问题,所以我删除了所有的列表,并尝试运行该程序。出于某种原因,在我的“创建角色”屏幕上,我调用了 this.Hide(); HomeScreen next = new HomeScreen(); next.ShowDialog(); 但是对于我的主屏幕表单,我最终在那里放置了一个

我有一个rpg游戏,我已经工作了一段时间,我似乎无法得到列表设置。对于我想使用的不同设备,我有不同的课程,我发现很难在这些课程中设置列表,然后从不同的课程调用它,并以我的形式调用组合框。所以我决定从头开始,可能会问一个问题,所以我删除了所有的列表,并尝试运行该程序。出于某种原因,在我的“创建角色”屏幕上,我调用了

this.Hide();
HomeScreen next = new HomeScreen();
next.ShowDialog();
但是对于我的主屏幕表单,我最终在那里放置了一个参数
主屏幕(KylesRpgGame游戏)
,这样我就可以使用我的创建角色表单中的变量将它们放在主屏幕上。我不知道以前是如何工作的,但是现在我无法调用新的屏幕,因为我认为类中有一个参数,我不知道如何通过它。另外,如果有人对创建一个包含列表(比如标题项)的新类并将其调用到我的HomeScreen()构造函数有任何建议,那就太好了

KylesRpgGame
=创建一个字符

主屏幕
=我试图显示的主屏幕

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using Engine;

namespace KylesRpgGame
{

    public partial class KylesRpgGame : Form
    {
        Int32 remainingPoints { get; set; }
        public Player player1;

        public KylesRpgGame()
        {
            InitializeComponent();
            //Variables
            remainingPoints = 15;
            player1 = new Player();

            //
            //Attributes -> Lables
            lblStrengthPoints.Text = player1.Strength.ToString();
            lblAgilityPoints.Text = player1.Agility.ToString();
            lblIntelligencePoints.Text = player1.Intelligence.ToString();
            lblStaminaPoints.Text = player1.Stamina.ToString();
            lblPointsRemaining.Text = remainingPoints.ToString();
            //
        }
        private void btnStrInc_Click(object sender, EventArgs e)
        {
            if (remainingPoints > 0)
            {
                player1.Strength++;
                remainingPoints--;
                lblStrengthPoints.Text = player1.Strength.ToString();
                lblPointsRemaining.Text = remainingPoints.ToString();
            }
        }

        private void btnStrDec_Click(object sender, EventArgs e)
        {
            if (player1.Strength > 0)
            {
                player1.Strength--;
                remainingPoints++;
                lblStrengthPoints.Text = player1.Strength.ToString();
                lblPointsRemaining.Text = remainingPoints.ToString();
            }
        }

        private void btnAgiInc_Click(object sender, EventArgs e)
        {
            if (remainingPoints > 0)
            {
                player1.Agility++;
                remainingPoints--;
                lblAgilityPoints.Text = player1.Agility.ToString();
                lblPointsRemaining.Text = remainingPoints.ToString();
            }            
        }

        private void btnAgiDec_Click(object sender, EventArgs e)
        {
            if (player1.Agility > 0)
            {
                player1.Agility--;
                remainingPoints++;
                lblAgilityPoints.Text = player1.Agility.ToString();
                lblPointsRemaining.Text = remainingPoints.ToString();
            }            
        }

        private void btnIntInc_Click(object sender, EventArgs e)
        {
            if (remainingPoints > 0)
            {
                player1.Intelligence++;
                remainingPoints--;
                lblIntelligencePoints.Text = player1.Intelligence.ToString();
                lblPointsRemaining.Text = remainingPoints.ToString();
            }            
        }

        private void btnIntDec_Click(object sender, EventArgs e)
        {
            if (player1.Intelligence > 0)
            {
            player1.Intelligence--;
            remainingPoints++;
            lblIntelligencePoints.Text = player1.Intelligence.ToString();
            lblPointsRemaining.Text = remainingPoints.ToString();
            }
        }

        private void btnStaInc_Click(object sender, EventArgs e)
        {
            if (remainingPoints > 0)
            {
                player1.Stamina++;
                remainingPoints--;
                lblStaminaPoints.Text = player1.Stamina.ToString();
                lblPointsRemaining.Text = remainingPoints.ToString();
            }

        }

        private void btnStaDec_Click(object sender, EventArgs e)
        {
            if (player1.Stamina > 0)
            {
                player1.Stamina--;
                remainingPoints++;
                lblStaminaPoints.Text = player1.Stamina.ToString();
                lblPointsRemaining.Text = remainingPoints.ToString();
            }
        }
        private void btnTest_Click(object sender, EventArgs e)
        {
            //player.var = textbox
            player1.CharacterName = txtCharacterName.Text;
            //Get Gender
            if (rdoMale.Checked)
                player1.Gender = "Male";
            else
                player1.Gender = "Female";
            //Class
            player1.Class = cboClass.Text;

            //If name is blank or begin with spaces, return
            if(String.IsNullOrEmpty(txtCharacterName.Text) || txtCharacterName.Text[0] ==' ')
            {
                MessageBox.Show("You must insert a correct name. Names cannot begin with spaces.");
                return;
            }
            //if male or female is checked, return. If not 
            if(rdoMale.Checked == false && rdoFemale.Checked == false)
            {
                MessageBox.Show("You must select a gender.");
                return;
            }

            //Get class
            if (cboClass.Text != "Warrior")
            {
                if (cboClass.Text != "Hunter")
                {
                    if (cboClass.Text != "Priest")
                    {
                        MessageBox.Show("Choose a class.");
                        return;
                    }
                }
            }
            //Make them use all points
            if (remainingPoints > 0)
            {
                MessageBox.Show("You must use all your points.");
                return;
            }
            //Comfirmation Message Box
            MessageBox.Show("Your name is " + player1.CharacterName + "\n" + "Your Gender is "
                + player1.Gender + "." + "\n" + "Your Strength is " + player1.Strength + "\n"
                + "Your Agility is " + player1.Agility + "\n" + "Your Intelligence is "
                + player1.Intelligence + "\n" + "Your Stamina is " + player1.Stamina);

            this.Hide();
            HomeScreen next = new HomeScreen();
            next.ShowDialog();
        }
    }
}


无法向windows窗体的构造函数添加参数。这非常烦人,但这是平台的一个限制。在构建类之后,您必须修改它。如果需要严格的状态控制,您可以始终围绕表单构建一个包装类。

即使我从构造函数中取出参数,它也会返回一个“System.NullReferenceException”,这是在创建屏幕窗口尝试切换到主屏幕后发生的。我相信在删除参数并保留全局KyleRpgGame父项之后;它使我所有的变量无效。我试图将一个类包装在form类周围,但这也不起作用。My labels and InitializeComponent();下面有红色的波浪。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using Engine;

namespace KylesRpgGame
{
    public partial class HomeScreen : Form
    {
        KylesRpgGame parent;


        public HomeScreen(KylesRpgGame game)
        {
            parent = game;
            InitializeComponent();
            FindMaxExperience();
            PopulateStats();
        }

        public void FindMaxExperience()
        {
            if (parent.player1.Level == 1)
                parent.player1.MaxExperience = 100;
            else if (parent.player1.Level == 2)
                parent.player1.MaxExperience = 200;
            else if (parent.player1.Level == 3)
                parent.player1.MaxExperience = 300;
            else if (parent.player1.Level == 4)
                parent.player1.MaxExperience = 400;
            else if (parent.player1.Level == 5)
                parent.player1.MaxExperience = 500;
        }

        public void PopulateStats()
        {
            //Calculate secondary stats
            //Critical Strike
            parent.player1.CriticalStrike = ((double)parent.player1.Strength / parent.player1.CriticalStrikeMultiplier);
            parent.player1.CriticalStrikeToPercentage = parent.player1.CriticalStrike.ToString("P2");
            //
            //Double Turn
            parent.player1.DoubleTurn = ((double)parent.player1.Agility / parent.player1.DoubleTurnMultiplier);
            parent.player1.DoubleTurnToPercentage = parent.player1.DoubleTurn.ToString("P2");
            //
            //Spell Power
            parent.player1.SpellPower = ((double)parent.player1.Intelligence / parent.player1.SpellPowerMultiplier);
            parent.player1.SpellPowerToPercentage = parent.player1.SpellPower.ToString("P2");
            //
            //Hit Points
            parent.player1.HitPointsModifier = parent.player1.Stamina * 10;
            parent.player1.HitPoints = parent.player1.StartingHitPoints + parent.player1.HitPointsModifier;
            //
            //Set Labels
            lblCharacterName.Text = parent.player1.CharacterName.ToString();
            lblGender.Text = parent.player1.Gender.ToString();
            lblClass.Text = parent.player1.Class.ToString();
            lblLevel.Text = parent.player1.Level.ToString();
            lblExperience.Text = parent.player1.Experience.ToString() + "/" + parent.player1.MaxExperience.ToString();
            lblGold.Text = parent.player1.Gold.ToString();
            lblStrength.Text = parent.player1.Strength.ToString();
            lblAgility.Text = parent.player1.Agility.ToString();
            lblIntelligence.Text = parent.player1.Intelligence.ToString();
            lblStamina.Text = parent.player1.Stamina.ToString();
            lblCriticalStrike.Text = parent.player1.CriticalStrikeToPercentage.ToString();
            lblDoubleTurn.Text = parent.player1.DoubleTurnToPercentage.ToString();
            lblSpellPower.Text = parent.player1.SpellPowerToPercentage.ToString();
            lblHitPoints.Text = parent.player1.HitPoints.ToString();

        }
    }
}