如果您使用控制器,它可以容納所有需要的變量。控制器可以有一個實例化自己的靜態實例屬性(參見單例對象設計模式)。在開發移動應用程序時,這很常見,因爲內存通常是一個限制因素。其餘的方法是公共成員(不是靜態的),所以你可以像這樣訪問。你可以讓它們成爲屬性,或者只是使用公共成員。即使移動,我們也不會使用屬性,因爲它只會增加不必要的絨毛和拳擊/拆箱。
在一種形式,你可以使用:
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我使用命令並讓主控制器根據傳入的命令隱藏和顯示錶單,因此表單中的邏輯儘可能少。這可能會或可能不會適合你正在做的事情。
祝你好運
我在你的項目中使用了你的第一個例子。它在仿真器上效果很好,但在實際設備上引發空引用異常。我應該如何處理這個問題? –