2015-06-29 3 views
1

Я новичок в C#. Получена система регистрации с проектом регистрации. Возникли проблемы с формами.Form1 продолжает показывать

У меня есть 2 формы, form1 и form2. Form1 - моя основная форма, моя форма входа. Форма 2 является регистрационной формой.

Так вот как работает приложение: Прежде чем отобразить форму 1, сначала необходимо выполнить условие. Если условие выполнено, появится окно сообщения, после чего отобразится form2. Однако, когда условие не выполнено, будет отображаться форма1.

Таким образом, проблема в том, что форма1 продолжает показывать, хотя условие выполнено. Form2 появляется, но form1 тоже появляется.

private void Form1_Load(object sender, EventArgs e) 
{ 
    if (condition) 
    { 
     MessageBox.Show("Message"); 
     this.Hide(); 
     Form2 frm = new Form2(); 
     frm.Show(); 
    } 
} 
+3

Что-то вроде этого, может быть: http://stackoverflow.com/a/4210040/426894 – asawyer

+3

где 'condition' быть установлен? –

+0

Возможный дубликат [Скрытие формы и отображение другого при нажатии кнопки в приложении Windows Forms] (http://stackoverflow.com/questions/4345666/hiding-a-form-and-showing-another-when-a -button-is-clicked-in-a-windows-forms-ap) –

ответ

2

Вы не должны делать такого рода вещи в из Form1, чтобы начать с. Логично, что имеет смысл сначала проверить ваше состояние, а затем никогда не создавать экземпляр Form1, если вы не собираетесь его использовать.

Внутри Program.cs, если вы не изменили его, вы должны иметь следующую строку кода:

Application.Run(new Form1()); 

Вы должны заменить эту строку с некоторым кодом, чтобы проверить ваше состояние и определить, какая форма для запуска с:

if (condition) 
    { 
     MessageBox.Show("Message"); 
     Application.Run(new Form2()); 
    } 
    else 
    { 
     Application.Run(new Form1()); 
    } 
+0

спасибо, ваш код работает! – Rom

1

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

Приглашение на этот пост: why isn't this.Hide() working in Form1_load event?

+0

и 'condition' является ложным по дефекту – Alan

+0

@Zero, ну, если мы идем по фактическому коду OP, мы можем предположить, что' condition' действительно есть true, поскольку form2 все еще показывает. form1 также будет оставаться видимым независимо от того, что такое 'condition'. –

+0

Я согласен с тобой. Только уточнил, что, поскольку он не будет работать, если он решает, что вы указываете. – Alan

1

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

[STAThread] 
static void Main() 
{ 
    if (new FormLogin().ShowDialog() == DialogResult.OK) 
    { 
     Application.Run(new FormMain()); 
    } 
} 

И типичный метод-обработчик в форме входа кнопки для входа в систему:

private void btnLogin_Click(object sender, EventArgs e) 
{ 
    if (CheckUserPassword()) 
    { 
     this.DialogResult = System.Windows.Forms.DialogResult.OK; 
    } 
    else MessageBox.Show("Login failed!"); 
} 
Смежные вопросы