2013-10-25 5 views
1

У меня есть три формы в моем приложении.Скрыть пользовательскую форму ввода

Форма1 является основной формой. Form2 - это форма с двумя полями ввода. Form3 - это форма проверки пароля, которая запускается из Form1 и после успешной аутентификации отображается Form2.

Form1 -> Форма Form3 -> Form2

private void button1_Click(object sender, EventArgs e) 
{ 
    if (string.IsNullOrEmpty(this.textBox_entry_password.Text)) 
    { 
     MessageBox.Show("Please enter a password", "Error", MessageBoxButtons.OK, 
         MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); 
     this.textBox_entry_password.Focus(); 
    } 

    else 
    { 
     // Authentication not Implemented so far 
     Form Form2 = new Form2(); 
     Form2.StartPosition = FormStartPosition.CenterScreen; 

     // Code for hiding Form3 -- Needed ???? 
     Form2.ShowDialog(); 
    } 

Я хочу Form1, чтобы остаться как таковой и скрыть form3 и показать Form2.

this.hide() 

скрывает форму1.

Если я попробовать

Form Form3 = new Form3(); 
Form3.Hide(); 

Он ничего не делает. Form3 остается там.

Как скрыть форму3?

+1

В своем коде вы на самом деле не * показать * экземпляр 'Form3'. Вы создаете новый экземпляр и сразу же пытаетесь скрыть его. Там, где вы создаете экземпляр «Form3», который отображается, это тот экземпляр, который вам нужно скрыть. – David

+0

Эта кнопка1_Click() вызывается из Form3. Я уже на Form3. Форма 1 также видна. Я хочу только скрыть существующий экземпляр Form3 и показать Form2, пока Form1 останется там. –

+0

В Form1 вы скрываете Form1, а затем запустите Form2. В Form2 вы скрываете Form2 и начинаете Form3. В Form3 вы скрываете Form3 и т. Д. Форма входа -> На самом деле в вашем случае будет достаточно основной формы. Вы должны рассмотреть возможность именования своих форм для удобства чтения. – Measuring

ответ

1

попробовать это:

Form2 a = new Form2(); 
    a.Show(); 
    this.Close(); 

в случае нажатия кнопки внутри Form3

+1

Этот код скрывает форму 3, но показывает необычное поведение. Он скрывает форму Form2 на панели задач, и вам нужно щелкнуть по ней, чтобы сфокусировать ее. Я попробовал focus() и WindowState, но не повезло. –

+0

сделайте тот же фрагмент. Когда вы переходите из формы1 -> form3, т. Е. Вот так: Form3 a = new Form3(); a.Show(); это.Close(); 'в случае щелчка внутри form1 –

+1

Я до сих пор не разрешаю проблему. Просьба помочь –

0

Создать перегрузку вашего Form3() конструктора и передать Form1 экземпляр к нему.

private Form form; 
public Form3(Form frm) 
{ 
    form = frm; 
} 

Теперь везде, где вы хотите, чтобы скрыть/показать Form1, просто использовать form.Hide(), form.Show();

В вашем случае использования

if (string.IsNullOrEmpty(this.textBox_entry_password.Text)) 
     { 
      MessageBox.Show("Please enter a password", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); 
      this.textBox_entry_password.Focus(); 
     } 

     else 
     { 

      // Authentication not Implemented so far 

      Form Form2 = new Form2(); 
      Form2.StartPosition = FormStartPosition.CenterScreen; 

      // Code for hiding Form3 -- Needed ???? 
      Form2.ShowDialog(); 
      this.Hide(); 
      form.ShowDialog(); 

     } 
0

Ther много способов сделать это. Ниже представлен подход, который мне нравится, поскольку форма пароля связана только с получением и аутентификацией пароля и ничего не знает о Form1 и Form2.

Код в Form3:

private void button1_Click(object sender, EventArgs e) 
{ 
    if (string.IsNullOrEmpty(this.textBox_entry_password.Text)) 
    { 
     MessageBox.Show("Please enter a password", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); 
     this.textBox_entry_password.Focus(); 
    } 
    else 
    { 
     // Authentication code here 
     // if (isAuthenticated) 
     // { 
     //  DialogResult = DialogResult.OK; 
     //  Close(); // hides and closes the form 
     // } 
    } 
} 

код в Form1, чтобы использовать форму 3 и Form2:

var dialogResult = DialogResult.Cancel; 

// Always explicitly dispose a form shown modally; using clause will do this. 
using (var form3 = new Form3()) 
{ 
    dialogResult = form3.ShowDialog(this); 
} 

if (dialogResult == DialogResult.OK) // password authenticated 
{ 
    // Always explicitly dispose a form shown modally; using clause will do this. 
    using (var form2 = new Form2()) 
    { 
     dialogResult = form2.ShowDialog(this); 
    } 
} 
+0

Где я использую этот код в Form1? Я положил другой в Form3. Form3 вводит пароль и закрывается. –

+0

Используйте этот код в Form1 везде, где вы хотите показать Form3 и Form2. У вас еще нет кода в Form1 для отображения Form3 и Form2? – groverboy

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