2013-08-12 3 views
3

У меня есть простая программа, которая запускается, но до этого я вытаскиваю форму для входа, которая проверяет правильность информации. Если это так, форма входа закрывается и начинается основная форма. Однако, когда я закрываю регистрационную форму после открытия основной формы, она закрывает все приложение.Убрать регистрационную форму?

В моей программе program.cs запускается только новый frmLogin. Это то, что происходит, когда я вхожу в систему.

frmMain frm = new frmMain(UsernameTextBox.Text, PasswordTextBox.Text); 
frm.Show(); 
this.Close(); 

Как я могу подавить это? Спасибо

+1

вам нужно добавить отдельную строку, чтобы открыть ее в вашей программе program.cs, когда вы закрываете родительский диалог, вы закрываете диалог с ним или делаете это по-другому, загружаете форму входа в систему, когда вы открываете другую форма, если недействительный вход, закрыть обе формы – Sayse

ответ

0

Я предлагаю вам использовать Panel вместо новой формы. Поместите свои элементы управления входами на Panel и покажите его первым. Если вход в систему удался, просто сделайте панель невидимой или удалите ее из формы. Затем сделайте панель с основными элементами управления видимыми.

if(IsLoginSuccess) 
{ 
    panel.Visible = false; 
    mainFormControlsPanel.Visible = true; 
} 

Кроме того, это должно быть быстрее, чем ваш подход, я считаю.

Надеюсь, это поможет.

+1

Очень сложно ввести единую форму, которая выполняет несколько совершенно разных функций путем замены всего содержимого. Поскольку он логически имеет две разные формы, желательно иметь две реальные формы. – Servy

2

У вас не должно быть вашей формы входа в качестве основной формы, так как она не будет активна в течение большей части времени, когда приложение работает, и у вас есть другая форма, которая является логически основной формой ваше приложение.

Перейдите в файл program.cs и укажите свою основную форму в форме Application.Run, так что это действительно основная форма приложения. В вашей основной форме Load event Hide и используйте ShowDialog, чтобы показать свою форму для входа. Когда ваша форма входа закрыта, вы можете продолжить загрузку основной формы.

0

Я хотел бы предложить что-то вроде:

static void Main(string[] args) { 
     var formLogin = new FormLogin(); 
     formLogin.ShowDialog(); 
     Application.Run(new FormMain(formLogin.UserName, formLogin.Password)); 
} 
+1

Это работает? Разве не требуется «Application.Run» для цикла всего цикла, или 'ShowDialog()' имеет свой собственный? – Codecat

+0

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

+0

Ницца! Я этого не знал. – Codecat

0

Вам нужно настроить Program.cs сделать это примерно так:

DialogResult result = DialogResult.Cancel; 

while (result != DialogResult.OK) 
{ 
    using (LoginForm loginForm = new LoginForm()) 
    { 
     result = loginForm.ShowDialog(); 

     if (result != DialogResult.OK) continue; 

     if (!AuthenticateCredentialsSomehow.Authenticate(loginForm.Username, loginForm.Password)) 
     { 
      MessageBox.Show("Login Failed!"); 
      result = DialogResult.Cancel; 
      continue; 
     } 

     MainForm mainForm = new MainForm(loginForm.Username, loginForm.Password); 
     Application.Run(mainForm); 
    } 
} 

Таким образом, ваша форма Войти исчезнет, ​​когда вы выполняются с ним, и приложение будет запускаться в вашей основной форме после того, как будет выполнен вход в систему.

-1

Используйте ShowDialog() вместо Show(), потому что это покажет форму как модальную - это также не позволяет пользователю просто игнорировать экран входа в систему.

+0

Он показывал основную форму немодально, а не форму входа, и это тоже не ответ на вопрос. – Servy