调用其他窗口时,C#Winform关闭打开的窗口

时间:2012-04-25 13:52:00

标签: c# wpf winforms

当我打电话给新窗口时,如何关闭打开的窗口?这意味着我当时只想要一个儿童窗口。我不允许多窗口。

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();
        }
    }

3 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:1)

实现伪母版页有多种方法:

  • 您可以使用所需的布局创建BaseForm表单。然后从此BaseForm继承其他表单并提供自定义内容。
  • 您可以使用所需的布局创建MainForm表单。然后将内容控件创建为UserControls并在面板中显示它们。
  • 您可以使用所需的布局创建MasterUserControl。然后通过继承MasterUserControl创建内容控件(它们将具有相同的布局)。然后使用主窗体作为浏览器显示不同的内容控件,如页面。

实施例

  1. Main_Usr表单上创建所需的布局。
  2. 不要将其设置为MdiContainer
  3. 如果您想访问某些控件(例如子窗体的页脚或标题,请将这些控件的属性Modifiers设置为受保护)
  4. 打开Ordre_Liste表单代码并将其更改为继承自Main_Usr表单,而不是Form
  5. 将自定义内容添加到Ordre_Liste表单
  6. 瞧!你有'masterpage'

    更新(第3个选项)

    1. 创建名为MasterUserControl
    2. 的新用户控件
    3. 在此控件上创建所需的布局,为自定义内容保留空间(顺便说一下,不要使用TableLayoutPanels - 它们存在设计器继承问题)。
    4. 创建名为HomeUserControl的新用户控件,并将其更改为从MasterUserControl继承。
    5. 打开HomeUserControl设计器并添加自定义内容。您还可以修改具有protected修饰符的父控件。
    6. 在您的主要表单位置HomePageUserControl
    7. 有不同的方法来实现控件(也称为页面)之间的导航。最简单的方法 - 在主表单上有菜单。其他方式 - 在主控件上定义事件'导航',在主窗体上订阅该事件,并从'pages'中提升它。

答案 2 :(得分:0)

像:

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();
}

注意,不要直接关闭它们,因为如果你试图在第一个foreach循环中关闭(或处理)它们会出现错误。这就是为什么你需要将它们放入列表并在那里关闭它们。