2015-06-27 3 views
-2

Я хочу показать другую форму (Form2) с нажатием кнопки. В основном, когда кнопка нажата в Form1, должна отображаться другая форма (Form2), это не должно скрывать Form1, хотя и должно изменить текст кнопки на «Скрыть прогресс» в Form1. И когда эта кнопка снова нажата, форма 2 должна скрыться, а кнопка «текст» должна измениться на «Показать прогресс».Скрыть и показать вторую форму на кнопке Нажмите

Ниже приведены мои усилия по выполнению этой работы. Когда я нажал кнопку «Показать прогресс», он приносит форму 2 и также меняет текст в кнопке. Но когда я снова нажал кнопку, вместо того, чтобы скрывать Form2, он открывает еще один экземпляр Form2.

Возможно, причина в том, что значение bool не сохраняется.

Вот мой код для обработчика событий кнопки.

public partial class Main : Form 
    { 
     public string output_green, output_grey, output_blue, output_black; 
     public bool visible; 
private void button1_Click(object sender, EventArgs e) 
     { 

      output progressWindow = new output(); 

      if (visible == false) 
      { 
       progressWindow.Show(); 
       button1.Text = "Hide Progress"; 
       visible = true; 
      } 

      else 
      { 
       progressWindow.Show(); 
       button1.Text = "Show Progress"; 
       visible = false; 

      } 

     } 
} 

Как я могу достичь того, что мне нужно.

ответ

0

Проблема:

Каждый раз, когда вы нажимаете button1новый progressWindow инициализирован.

Также вы используете progressWindow.Show() вместо Hide() в другом месте.

Решение:

Declare progressWindow из button1_Click. И затем инициализируйте его с button1_Click. Теперь он будет инициализирован только один раз (используя if).

output progressWindow = null; 
private void button1_Click(object sender, EventArgs e) 
{    
     if(progressWindow == null) 
      progressWindow = new output(); 
     if (button1.Text == "Show Progress") 
     { 
      progressWindow.Show(); 
      button1.Text = "Hide Progress"; 
     } 
     else 
     { 
      progressWindow.Hide(); 
      button1.Text = "Show Progress"; 
     } 
    } 
} 
+0

@Raging Bull, Он по-прежнему не скрывает Form2 –

+0

Да ваши решения инициализировать Form2 только один раз, но не Form2 не спрятался, когда кнопка нажата –

+0

@AmritSharma: Вы используете 'progressWindow.Show () 'в другой части. Это была проблема. Теперь я обновил свой ответ. Попробуй это сейчас. –

0

За коротким решением, где продолжительность жизнь Окна прогресса в упорствует с основной формой:

output progressWindow = new output(); 
    private void button1_Click(object sender, EventArgs e) 
    { 
     progressWindow.Visible = !progressWindow.Visible; 
     button1.Text = (progressWindow.Visible) ? "Hide Progress" : "Show Progress"; 
    } 

Здесь вы избавляетесь от необходимости дополнительного булевым, так как прогресс самой формы вполне способен рассказывания вы это видно или нет.

0
// Creates a single instance only it it is request. 
    private Output ProgressWindow 
    { 
     get 
      { 
       return progressWindow?? (progressWindow= new Output(){Visible = false}; 
      } 
    } 

    private Output progressWindow; 

    private void button1_Click(object sender, EventArgs e) 
    {    
     ProgressWindow.Visible = !ProgressWindow.Visible; 
     button1.Text = (ProgressWindow.Visible) ? "Hide Progress" : "Show Progress"; 

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