【发布时间】:2013-09-05 19:17:32
【问题描述】:
我有两个表单 Form1,其中包含 CharStats 类和 Mainform,其中包含 MainForm 类。 MainForm 有一个与之关联的标签 pcNameLabel 和 CharStats 包含一个按钮,该按钮应该在单击时更改 pcNameLabel.Text。因为我在表单和类之间进行通信,所以我在MainForm 内部设置了一个静态方法SetInfo(),它由CharStats 内部的方法StatTransfer() 调用。除了我不能从静态方法SetInfo() 内部修改pcNameLabel.Text 之外,整个事情几乎都正常工作,因为静态非静态事物。那么我该怎么做呢。
Mainform(我删掉了一些处理变量的不相关数据)
public partial class MainForm : Form
{
int statHolder;
int statAdjuster;
string healthHolder;
int finalHealth;
int diceOut;
int maxDice;
int healingOnOff = 0;
int pcOrEn = 0;
int turnCount = 0;
int diceType;
int diceResult;
public static int formInit = 0;
public static string VariableLabel1;
public static string Variable2;
Random _r = new Random();
public MainForm()
{
CharStats form = new CharStats();
form.Show();
InitializeComponent();
}
public static void SetInfo()
{
Variable2 = VariableLabel1;
pcNameLabel.Text = Variable2;
}
}
Form1(也删减变量处理数据)
public partial class CharStats : Form
{
string name = "";
string health = "";
string mana = "";
string strength = "";
string agility = "";
string intelligence = "";
public CharStats()
{
InitializeComponent();
}
void Fighter()
{
name = "Reginaldxxxxxxx";
health = "200";
mana = "50";
strength = "16";
agility = "12";
intelligence = "6";
}
public void StatTransfer()
{
MainForm.VariableLabel1 = Name;
MainForm.formInit = 1;
MainForm.SetInfo();
}
void FighterButtonClick(object sender, EventArgs e)
{
Fighter();
StatTransfer();
}
}
【问题讨论】:
-
那么您要更改表单的哪个instance 文本?我根本不清楚
SetInfo首先应该是静态的。 -
当它不是静态的时,我无法从 form1 访问它。文本在主窗体中
-
你需要在
MainForm的一个实例上调用它。这才是重点。 Form1(显然实际上称为CharStats)应该有一个MainForm的实例,以便操作该实例。想象一下同时显示了两个MainForm实例 - 怎么会知道要更改哪种形式? -
我对实例不太熟悉,但我确实理解你的意思。如果我理解正确,我需要稍微改变一下。我没有在 Form1 中调用
MainForm的实例(该表单称为 form 1,它有一个名为CharStats的类),我只是尝试过,而不是什么都不做,而是创建了 form1 的重复窗口,我认为如果我在 MainForm 中创建CharStats的实例,事情可能会更好。我将尝试转换它,然后我会看看它是如何工作的。 (通过添加一个按钮来调用 CCharStats我的意思是 -
它现在不会抛出错误或导致奇怪的错误(有一个按钮可以调用
CharStats,但它什么也没做。我会继续困惑。
标签: c# label static-methods