2013-02-27 8 views
0

Прежде всего, я новичок в C# и программировании в целом. Я искал довольно тщательно, но я могу найти только случаи, когда кто-то хочет открыть другую форму и скрыть ту, на которую была нажата кнопка.Открытие предыдущей формы при закрытии

В этом случае у меня постоянно возникают проблемы с моей программой, когда я нажимаю кнопку (X) в любой форме, отличной от основной формы Form1. Т.е.: нажатие кнопки скрывает главное окно и открывает соответствующую форму, а кнопка «назад» на этой форме скрывается сама и показывает (я думаю, другой экземпляр) предыдущей «основной» формы. - Возможно, я тоже мог бы использовать некоторые рекомендации. lol

Я бы не прочь, если бы он закрыл все приложение, если был нажат X, но мне нужно, чтобы на всех окнах присутствовал «X», и все окна должны были выйти из всего приложения, если нажата клавиша X. Какие-либо предложения?

Спасибо заранее,

Код:

Form1:

public partial class Form1 : Form 
     { 
      public Form1() 
      { 
       InitializeComponent(); 
      } 
      public void btnTransaction_Click(object sender, EventArgs e) 
      { 
       Transaction transactionForm = new Transaction(); 
       Form mainForm = this; 
       transactionForm.Show(); 
       mainForm.Hide(); 
      } 
     } 

Форма сделки:

public partial class Transaction : Form 
     { 
      public Transaction() 
      { 
       InitializeComponent(); 
      } 
      private void button4_Click(object sender, EventArgs e) 
      { 
       Form1 mainForm = new Form1(); //not sure if I'm doing this right.. 
       this.Hide();     //I don't know how to "reuse" the original Form1 
       mainForm.Show(); 
      } 
     } 
+0

после открытия 'Form1' сделать и есть любое использование' 'транзакция формы? –

+0

Распространяется ли поток страниц в разных формах или вы можете перепроектировать ваше приложение и работать с userControls (такое же поведение, как формы без окна) в tabControl или на одной панели (с простым управлением видимостью)? – Michael

+0

Спасибо за помощь всем! Этот форум был очень полезен! Теперь я понимаю, почему фаза планирования так важна :) – user2117486

ответ

1

Я бы порекомендовал вам создать MDI Container для этого. Перетащите MenuStrip из ToolBox в Form1, а затем создайте ToolStripMenuItem «form2» в MenuStrip. Теперь вы можете позвонить Form2 в Form1, как этот

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      IsMdiContainer = true; 
     } 
     Form2 frm2; 
     public void CreateMdiChild<T>(ref T t) where T : Form, new() 
     { 
      if (t == null || t.IsDisposed) 
      { 
       t = new T(); 
       t.MdiParent = this; 
       t.Show(); 
      } 
      else 
      { 
       if (t.WindowState == FormWindowState.Minimized) 
       { 
        t.WindowState = FormWindowState.Normal; 
       } 
       else 
       { 
        t.Activate(); 
       } 
      } 
     } 
     private void form2ToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      CreateMdiChild<Form2>(ref frm2); 
     } 
    } 

Когда нажав ToolStripMenuItem вы стреляете ToolStripMenuItem событие, оно покажет Form2, как ребенок в form1 т.е. МДИ контейнер и будет закрыт, когда вы закрываете Form1.

+0

Это то, что я искал. К сожалению, я думаю, что мне придется полностью начать все заново, так как мой код уже содержит много других утверждений и функций, которые я не включал в сообщение, которое собирается сломаться из-за автоматически сгенерированного jibberish, которого я пока не совсем понимаю. – user2117486

+0

Интересно, когда кто-то принимает ответ, но не повышается, как и вы. – kashif

0
public partial class Transaction : Form 
    { 
     Form1 _mainForm; 

     public Transaction(Form1 mainForm) 
     { 
      InitializeComponent(); 
      _mainForm = mainForm; 
     } 
     private void button4_Click(object sender, EventArgs e) 
     { 
      this.Close(); //since you always create a new one in Form1 
      _mainForm.Show(); 
     } 
    } 
0

Вы можете использовать Form.ShowDialog()

Когда этот метод вызывается, следующий код (код ниже «ShowDialog()») не выполняется до тех пор, пока диалоговое окно не будет закрыто.

private void button4_Click(object sender, EventArgs e) 
{ 
    Form1 mainForm = new Form1(); 
    this.Hide();     
    mainForm.ShowDialog(); 
    this.Show(); 
} 
0

Вы можете использовать ShowDialog() метод, который требует от пользователя, чтобы взаимодействовать с новой формой, прежде чем вернуться к прежней форме. Например, вы могли бы попробовать это:

public void btnTransaction_Click(object sender, EventArgs e) 
{ 
    using (var transactionForm = new Transaction()) 
    { 
     this.Hide(); 
     if (transactionForm.ShowDialog() == DialogResult.OK) 
     { 
      this.Show(); 
     } 
    } 
} 

DialogResult является то, что вы можете установить на TransactionForm так:

private void button4_Click(object sender, EventArgs e) 
{ 
    this.DialogResult = DialogResult.OK; 
    this.Close(); 
} 

Это довольно стандартный способ заставить взаимодействия по новой форме.

0
protected override void OnClosing(CancelEventArgs e) 
{ 
    this.Hide(); 
    menu menu = new menu("administrator"); 
    menu.ShowDialog(); 
    this.Close(); 
} 

// счастливым кодирование

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