Вход в систему .NET и заставки, которые нужно поместить в Application.Run - PullRequest
2 голосов
/ 10 декабря 2010

В .NET (язык: C #) при написании приложений Windows мы запускаем приложение с помощью формы, переданной в Application.Run.

Но когда у вас есть приложение, в котором у вас нет ни единого окна, чтобы сохранить его в живых ... Скорее, если активен какой-либо один из типов форм, вы не захотите, чтобы приложение оставалось.

Что у меня есть, например. Экран входа в систему, который, когда пользователь успешно вошел в систему, я не хочу закрывать. Однако вызов «Close ()», очевидно, закрывает все приложение, поскольку экран входа в систему является тем, который передается в Application.Run.

Следующий экран имеет ту же «судьбу», поэтому его тоже нельзя использовать, это будет экран, на котором пользователь что-то выбирает, а затем закрывает.

В любом случае ... Короче говоря. У меня есть несколько идей, но все они связаны с некоторыми не такими аккуратными вещами. Так что здесь я прошу что-то вроде «лучшей практики» в этих случаях. Это не что-то определенное, я знаю это, поэтому, пожалуйста, приветствуйте все хорошие идеи и обсуждения вокруг них.

Ответы [ 2 ]

0 голосов
/ 16 декабря 2011

Статья Code Project оказалась основой для решения (как сейчас).

В части "Навигатор" еще есть какие-то части, которые нужно отсортировать, но переопределение контекста работает отлично.

Суть реализации:

public class ApplicationContextNavigator : ApplicationContext, INavigator
{
  private readonly IWindsorContainer container;
  private IView Current { ... }
  public ApplicationContextNavigator(IWindsorContainer container) {...}
  public void Start<TView>() where TView : IView { ... }
  public void Start<TView>(IViewInitializer initializer) where TView : IView
  {
    Current = InitializeView<TView>(initializer);
    Application.Run(this);
  }

  public void Navigate<TView>() where TView : IView { ... }
  public void Navigate<TView>(IViewInitializer initializer) where TView : IView
  {
    IView closing = Current;
    IView showing = InitializeView<TView>(initializer);

    showing.Location = closing.Location;
    showing.Show();

    Current = showing;
    closing.Close();
  }

  private IView InitializeView<TView>(IViewInitializer initializer) where TView : IView
  {
    IView view = container.Resolve<TView>();
    initializer.Initialize(view);
    return view;
  }

  protected override void OnMainFormClosed(object sender, EventArgs e)
  {
    if(sender == Current)
    {
      base.OnMainFormClosed(sender, e);
    }
  }
}
0 голосов
/ 10 декабря 2010

Создайте основную функцию, в которой вы создадите окна (и покажите их). Для этого вы должны определить, что приложение не должно закрываться при закрытии главного или последнего окна

...