如何从另一个表单访问表单中的类的变量?



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

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 不起作用。为什么不起作用?我不明白为什么它不起作用。我应该写什么才能让它工作?

这主要是因为这里有一个空实例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类重构为单独的文件,而不是在表单中定义它

最新更新