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

本文关键字:窗口 调用 其他 Winform | 更新日期: 2023-09-27 18:32:08

调用新窗口时如何关闭打开的窗口?这意味着我当时只想要 1 个子窗口。我不允许多窗口。

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

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

有多种

方法可以实现伪母版页:

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

例:

  1. Main_Usr表单上创建所需的布局。
  2. 不要将其设置为 mdiContainer
  3. 如果要访问某些控件(例如子窗体中的页脚或页眉),请将这些控件的属性Modifiers设置为受保护)
  4. 打开Ordre_Liste表单代码并将其更改为从表单继承Main_Usr而不是Form
  5. 向表单添加自定义内容Ordre_Liste

瞧!你有"母版页"

更新(对于第三个选项)

  1. 使用名称 MasterUserControl 创建新的用户控件
  2. 在此控件上创建所需的布局,为自定义内容保留空间(顺便说一句,不要使用 TableLayoutPanels - 它们在设计器继承方面存在问题)。
  3. 使用名称 HomeUserControl 创建新的用户控件,并将其更改为从MasterUserControl继承。
  4. 打开设计器HomeUserControl并添加自定义内容。您还可以修改父控件,该控件具有protected修饰符。
  5. 在您的主表单上放置HomePageUserControl

有不同的方法可以实现控件(也称为页面)之间的导航。最简单的方法 - 在主窗体上有菜单。其他方式 - 在主控件上定义事件"导航",在主窗体上订阅该事件,并从"页面"引发它。

在类级别创建表单实例。然后,您可以从事件或方法访问它们。

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

喜欢:

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 循环中关闭(或处置)它们,就会出现错误。这就是为什么您需要将它们放入列表中并在那里关闭它们的原因。