如果您使用控制器,它可以容纳所有需要的变量。控制器可以有一个实例化自己的静态实例属性(参见单例对象设计模式)。在开发移动应用程序时,这很常见,因为内存通常是一个限制因素。其余的方法是公共成员(不是静态的),所以你可以像这样访问。你可以让它们成为属性,或者只是使用公共成员。即使移动,我们也不会使用属性,因为它只会增加不必要的绒毛和拳击/拆箱。
在一种形式,你可以使用:
MainController.Instance.loginID = "me123";
另一个可以使用
MessageBox.Show("my loginID is: " + MainController.Instance.loginID);
您还可以添加类似的方法:
MainController.Instance.ClearSession();
在内部只设置登录ID来空值。等等。我个人使用主控制器来显示窗口。因为在移动中我们需要确保我们的资源也被清理。
MainController.Instance.ShowLoginForm();
的MainController代码开始应该是这个样子:
public class MainController : IDisposable {
//all forms we are controlling
LoginForm _loginForm = null;
//all public members
public string loginID = null;
#region Singleton Instance stuff
private static MainController me = null;
private void MainController() { }
public static Instance {
get {
if(me == null) {
me = new MainController();
}
return me;
}
}
#endregion
//all public methods
public void Init(someargshere) {
//TODO some init like load config files, etc.
}
public void Dispose() {
//TODO cleanup
}
public void ClearSession() {
loginID = "";
}
public void ShowLoginForm() {
if(loginForm!=null) {
loginForm.Dispose();
loginForm == null;
}
loginForm = new LoginForm();
loginForm.Show();
loginForm.BringToFront();
}
//etc
}
使您在Program.cs中的代码做的第一件事就是初始化你的主控制器
main(string[] args) {
//start a controller
MainController.Instance.Init(passomeargs if needed);
//now fire off our main form
Application.Run(new MainForm());
}
现在所有表单都可以通过MainController访问数据
Personall我使用命令并让主控制器根据传入的命令隐藏和显示表单,因此表单中的逻辑尽可能少。这可能会或可能不会适合你正在做的事情。
祝你好运
我在你的项目中使用了你的第一个例子。它在仿真器上效果很好,但在实际设备上引发空引用异常。我应该如何处理这个问题? –