【发布时间】:2016-04-20 17:57:12
【问题描述】:
我正在单击一个按钮来隐藏一个窗口并打开另一个窗口。
private void gamemodButton_Click(object sender, EventArgs e)
{
background.moduleNumber = 1;
this.Hide();
moduleScreen showForm = new moduleScreen();
showForm.Show();
MessageBox.Show(background.moduleNumber.ToString()); //for checking that the variable was applied
}
标签的文本属性将根据单击的按钮在新表单中发生变化。这是通过根据单击的按钮为公共变量分配一个值来完成的。
public class backgroundProgram
{
public int moduleNumber;
}
这是根据变量改变标签上文本的代码:
private void moduleScreen_Shown(Object sender, EventArgs e)
{
switch (background.moduleNumber)
{
case 1:
moduleLabel.Text = "Game Design 1 - CGP1005M";
break;
case 2:
moduleLabel.Text = "Algorithms and Complexity - CMP 1124M";
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
default:
MessageBox.Show("Nope");
break;
}
}
到目前为止,变量 background.moduleNumber 在进入 switch/case 之前被重置为 0,所以我每次只能返回默认 case。有什么想法吗?
编辑:刚刚向变量添加了一个监视,它在这一行被擦除。
private System.ComponentModel.IContainer components = null;
这在moduleScreen.Designmer.cs中
显示我的新 backgroundProgram() 的代码;位置
namespace ModNote
{
public partial class moduleScreen : Form
{
static backgroundProgram background = new backgroundProgram();
public moduleScreen()
{
InitializeComponent();
Shown += moduleScreen_Shown;
}
public void moduleScreen_Shown (Object sender, EventArgs e)
{
switch (background.moduleNumber)
{
case 1:
moduleLabel.Text = "Game Design 1 - CGP1005M";
break;
case 2:
moduleLabel.Text = "Algorithms and Complexity - CMP 1124M";
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
default:
MessageBox.Show("Nope");
break;
}
}
} }
【问题讨论】:
-
moduleScreenWinForm 如何接收backgroundProgram对象?有这样的静态实例吗?我看不出代码有任何问题。 -
是:静态背景程序背景=新背景程序();
-
这是在什么类中定义的?它必须只在一个中定义。如果
moduleScreen_Show()与gamemodeButton_Click()在不同的类中,则对该静态变量的访问应该类似于SomeClass.background.moduleNumber。它重置为零的事实听起来就像您正在重新创建该对象并且它获得默认的int值 (0)。 -
我仍然不确定表单的更改如何重置 background.moduleNumber 值?
-
给变量加一个watch,当值改变时让它中断