Если вы используете контроллер, он может содержать все необходимые переменные.Контроллер может иметь статическое свойство Instance, которое создает себя (см. Шаблон проектирования объекта Singleton).При разработке мобильных приложений это очень распространено, поскольку память часто является ограничением.Остальные методы являются открытыми членами (не статическими), поэтому вы можете получить к ним доступ следующим образом.Вы можете сделать их свойства или просто использовать публичный член.Даже с мобильными устройствами мы, как правило, не используем свойства, поскольку они просто добавляют ненужный пух и бокс / распаковку.
В одной форме вы можете использовать:
MainController.Instance.loginID = "me123";
, в другой вы можете использовать
MessageBox.Show("my loginID is: " + MainController.Instance.loginID);
Вы также можете добавить методы, такие как:
MainController.Instance.ClearSession();
, которые внутренне просто устанавливают логин в null.и т.д. Лично я использую основной контроллер, чтобы показать окна, а также.Потому что в мобильных устройствах мы должны убедиться, что наши ресурсы также очищены.
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
Лично я использую команды и имею главный контроллерскрывать и показывать формы на основе переданных команд, чтобы в формах было как можно меньше логики.Это может или не может дать хорошо то, что вы делаете.
Удачи