2012-04-25 13 views
0

新しいウィンドウを呼び出すと、開いたウィンドウを閉じるにはどうしたらいいですか?つまり、当時は1つの子ウィンドウしか必要ないということです。私はマルチウィンドウを許可していません。C#Winform閉じたウィンドウを他のウィンドウに呼び出す

public partial class Main_Usr : Form 
    { 
     public Main_Usr() 
     { 
      InitializeComponent(); 
      this.IsMdiContainer = true; 

      if (Program.IsFA) barSubItem_Ordre.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; 

      Ordre_Liste f = new Ordre_Liste(); 
      f.MdiParent = this; 
      f.Show(); 
    } 

     private void barButtonItem_CreateOrdre_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) 
     { 
      Program.AllerRetour = "Ordre Aller"; 
      Ordre_Fiche f = new Ordre_Fiche(); 
      f.MdiParent = this; 
      f.Show(); 
     } 

     private void barButtonItem_OrdreListe_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) 
     { 
      Ordre_Liste f = new Ordre_Liste(); 
      f.MdiParent = this; 
      f.Show(); 
     } 

     private void barButtonItem_CreateOrdRet_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) 
     { 
      Program.AllerRetour = "Ordre Retour"; 
      Ordre_Fiche f = new Ordre_Fiche(); 
      f.MdiParent = this; 
      f.Show(); 
     } 
    } 
+0

各itemclickに他の子ウィンドウを配置します。 – Zaki

+0

MDIウィンドウを使用して1人の子供だけを表示するのはなぜですか?単純なウィンドウを使用して、そのウィンドウ内に異なるコントロールを表示するか、 'TabControl'を使ってみてください。 –

+0

@lazyberezovsky疑似WebFormマスターページを実装するために使用します。 WinFormにはマスターページがありません。 – user609511

答えて

1

擬似マスターページを実装するためのさまざまな方法があります。

  • あなたが希望のレイアウトをベースフォームのフォームを作成することができます。その後、このBaseFormから他のフォームを継承し、カスタムコンテンツを提供します。
  • メインフォームフォームは、希望のレイアウトで作成できます。 UserControlsとしてコンテンツコントロールを作成し、パネルに表示します。
  • 希望のレイアウトでMasterUserControlを作成できます。その後、MasterUserControlから継承してコンテンツコントロールを作成します(同じレイアウトになります)。次に、メインフォームをブラウザとして使用して、ページなどの異なるコンテンツコントロールを表示します。

例:

  1. Main_Usrフォームに所望のレイアウトを作成します。
  2. はあなたには、いくつかのコントロール(たとえば、フッターまたは子フォームからヘッダ、保護されたこれらのコントロールのModifiersに設定されたプロパティ)
  3. オープンOrdre_Listeフォームコードにアクセスしたい場合はMdiContainer
  4. として設定し、継承するためにそれを変更しないでください代わりにForm
  5. Main_Usr形は、Ordre_Listeフォーム

出来上がりにカスタムコンテンツを追加します!あなたは(第3オプションの)

UPDATE

  1. 「マスターページ」を持っている(ところでTableLayoutPanelsを使用していないカスタムコンテンツのためのスペースを保ち、このコントロールに所望のレイアウトを作成して名前をMasterUserControl
  2. を新しいユーザーコントロールを作成します。彼らはデザイナーの継承に問題があります)。
  3. 名前がHomeUserControlの新しいユーザーコントロールを作成し、MasterUserControlから継承するように変更します。
  4. HomeUserControlを開き、カスタムコンテンツを追加します。また、修飾子がprotectedの親コントロールを変更することもできます。(ページ別名)コントロール間のナビゲーションを実装する
  5. メインフォームの場所で
  6. HomePageUserControlあり

異なる方法。簡単な方法 - メインフォームにメニューがあります。他の方法 - イベントをマスターコントロールで 'ナビゲート'し、メインフォームでそのイベントに登録し、 'ページ'からそれを呼び出す。

+0

ありがとうございます...どちらが優れていますか? – user609511

+0

まず最初に、さまざまなフォームを扱わなければなりません。 2番目の方法では、子供からの 'masterpage'コントロールを更新するのは難しいです。私はここで最善のアプローチは3番目の方法だと思う - 'masterpage' UserControlを作成します。それから他のコントロールを継承します(同じレイアウトになります)。次に、ブラウザ内のページを変更するなど、メインフォーム内のこのコントロールを切り替えます。 –

1

クラスレベルでフォームインスタンスを作成します。 イベントやメソッドからアクセスできます。

Form1 f1; 
    Form2 f2; 

void OpenForm1() 
{ 
    f1 = new Form1() 
    f1.Show(); 
} 

void OpenForm2() 
{ 
    f1.Dispose(); //or Hide if you want to show it again later 
    f2 = new Form2(); 
    f2.Show(); 
} 
+0

ご返信いただきありがとうございます。私は1で1を処理しなければならないことを意味します。開かれたすべてのフォームを廃棄する可能性はありますか? – user609511

+0

開いたフォームをループして閉じることができます。 –

+0

@ user609511すべてのフォームをリストまたは配列に保持し、フォームを反復して閉じます。 – Servy

0

のように:あなたがクローズ(または処分)しようとする場合は、それらが第一foreachループでは、エラーにそこに来るbecuase

List<Form> openForms = new List<Form>(); 

foreach (Form f in Application.OpenForms) 
    openForms.Add(f); 

foreach (Form f in openForms) 
{ 
    if (f.Name != "Menu") 
     f.Close(); 
} 

注意、それらを直接閉じないでください。なぜあなたはそれらをリストに入れてそこに閉じなければならないのですか?