如何从另一种形式访问某种形式的类的变量?

时间:2018-08-12 21:09:25

标签: c#

第一个表单的代码(主菜单):

public partial class MainMenu : Form
{
    public class Player
    {
        public string name, curWeapon, wpn1, wpn2, wpn3, wpn4,  wpn5, curArmor, arm1,
                      arm2, arm3, arm4, arm5, activeQuest, curPlace, Gurgonauth = "Gurgonauth",
                      Klebbetoth, Shalthazaar, Khurx, dungeon, dunEnemy, dun1, dun2; 
        public int dmg, armor, maxArmor, strength, endurance, accuracy, luck, hp, maxHp,
                   xp, xpmax, lvl, gold, bank, monstersKilled;
    }

    private void Form1_Load(object sender, EventArgs e) => name.MaxLength = 15;

    public void button1_Click(object sender, EventArgs e)
    {
        var p       = new Player();
        p.name      = name.Text;
        p.hp        = 100;
        p.maxHp     = 100;
        p.gold      = 0;
        p.lvl       = 1;
        p.strength  = 0;
        p.luck      = 0;
        p.xp        = 0;
        p.xpmax     = 100;
        p.curWeapon = "Bare Hands";
        p.curPlace  = p.Gurgonauth;
        p.endurance = 0;
        p.dmg       = 5;
        p.curArmor  = "None";
        p.monstersKilled = 0;
        Overview ovr = new Overview(p);
        ovr.Show(this);
        this.Hide();
    }
}

第二个表单的代码(概述):

 public partial class Overview : Form
 {
     var p = new MainMenu.Player();
     public Overview(MainMenu.Player p)
     {
         InitializeComponent();
         name.Text   += p.name;
         hp.Text     += p.hp.ToString();
         xp.Text     += p.xp.ToString() + "/" + p.xpmax.ToString();
         level.Text  += p.lvl.ToString();
         curWpn.Text += p.curWeapon;
         curArm.Text += p.curArmor;
         gold.Text   += p.gold.ToString();          
    } // It does what I want it to do

    private void Overview_FormClosing(object sender, FormClosingEventArgs e) => Application.Exit();
    public void button1_Click(object sender, EventArgs e) => p.gold += 10; // Shouldn't this work?
}

问题出在第二种形式的代码中(概述)。正如您从我的评论中看到的那样,它可以实现我想要的功能,但是p.gold + = 10不起作用。为什么不起作用?我不明白为什么它不起作用。我应该写些什么才能使其正常工作?

1 个答案:

答案 0 :(得分:1)

主要是因为p这里是一个空实例,如下面的代码所示

MainMenu.Player p = new MainMenu.Player();

您可能只想像这样分配它

 MainMenu.Player p = null;
 public Overview(MainMenu.Player p)
 {
     InitializeComponent();
     this.p = p;           // initialize here
     name.Text += p.name;
     hp.Text += p.hp.ToString();
     xp.Text += p.xp.ToString() + "/" + p.xpmax.ToString();
     level.Text += p.lvl.ToString();
     curWpn.Text += p.curWeapon;
     curArm.Text += p.curArmor;
     gold.Text += p.gold.ToString();          
}

顺便说一句,您应该考虑将Person类重构为单独的文件,而不是在表单中进行定义