2012-06-09 3 views
0

У меня проблема с отображением или скрытием формы в приложении Window Form.Показать скрытую форму в приложении

Я начинаю сначала запускать loginform в program.cs (Application.Run (new loginform());), при успешном завершении входа в систему, а затем показывать другую форму (Основной интерфейс), и я хочу закрыть или скрыть форму входа, когда вторая форма но он не работает.

Я не знаю, как это сделать. Это проблема, связанная с потоком, или нет?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Windows.Forms; 

namespace Myapp 
{ 
    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 

      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Loginfrm()); 

     } 
    } 
} 
+0

У меня 2 формы с Loginfrm и MainFrm. В моем приложении первый запуск - это loginfrm выше кода: Я хочу закрыть или скрыть Loginfrm, когда Mainfrm show !, после успешного входа в систему. – user1417068

+0

@ user1417068 Вы должны принять ответы на свои вопросы, которые были вам полезны. В противном случае люди перестанут отвечать на ваши вопросы. – sloth

+0

Возможный дубликат [C#: как предотвратить появление основной формы слишком рано] (http://stackoverflow.com/questions/495026/c-how-to-prevent-main-form-from-showing-too-early) – sloth

ответ

1

Вы можете добавить свойство к вашему Loginfrm класс, указывающий, если Войти был sucessfull или нет. Затем, после закрытия вашего Loginfrm, вы можете запустить другой цикл сообщений.

Пример:

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Loginfrm login = new Loginfrm(); 
    Application.Run(login); 
    if (login.LogInSuccesfull) 
     Application.Run(new MainForm()); 
} 
+0

LogInSuccesfull является переменной или функцией? – user1417068

+0

делают это свойство, указывающее, был ли логин успешным или нет. Я не знаю, как выглядит ваш Loginfrm. Другой способ - использовать свойство DialogResut. Поэтому, когда пользователь входит в систему, установите для свойства DialogResult значение «ОК», другое - «Отмена» и закройте форму. Затем проверьте свойство DialogResult в методе Main(). – sloth

+0

Application.Run (новый MainForm()) не работает! – user1417068

0
// in the mainform add to project form and call it SubForm 
SubForm subform = new Subform(); 
subform.Show(); 
// in the subform 
subform.Close(); 
0

Использование Singleton

MainInterface.cs

using System; 

public class MainInterface : Form 
{ 
    private static MainInterface Current; 

    private MainInterface() 
    { 
     if (LoginForm . Instance != null) 
     LoginForm . Instance . Close(); 
    } 

    public static MainInterface Instance 
    { 
     get 
     { 
     if (Current == null) 
     { 
      Current = new MainInterface(); 
     } 
     return Current; 
     } 
    } 
} 

LoginForm.cs

using System; 

public class LoginForm: Form 
{ 
    private static LoginForm Current; 

    private LoginForm() 
    { 

     if (MainInterface . Instance != null) 
     MainInterface . Instance . Close(); 
    } 

    public static LoginForm Instance 
    { 
     get 
     { 
     if (Current == null) 
     { 
      Current = new LoginForm(); 
     } 
     return Current; 
     } 
    } 
} 

Program.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Windows.Forms; 

namespace Myapp 
{ 
    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 

      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      LoginForm . Instance . ShowDialog(); 

     } 
    } 
} 

Переключение формы:

От LoginForm

LoginForm . Instance . Hide(); 
MainInterface . Instance . ShowDialog(); 

От MainInterface

MainInterface . Instance . Hide(); 
LoginForm . Instance . ShowDialog(); 

Для более что 2 форм, я предлагаю использовать класс-менеджер (напр. Процесс) для управления и переключения между ними :)

С уважением,

+0

Хорошо, я попробую! – user1417068

+0

Это не работает, LoginForm.Instance.ShowDialog() не работает !, – user1417068

+0

Как! Какая ошибка! –

Смежные вопросы