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();
}
}
有多种
方法可以实现伪母版页:
- 您可以创建具有所需布局的基本窗体窗体。然后从此基本窗体继承其他窗体并提供自定义内容。
- 您可以创建具有所需布局的主窗体窗体。然后将内容控件创建为用户控件,并在面板中显示它们。
- 您可以使用所需的布局创建主用户控件。然后通过从 MasterUserControl 继承来创建内容控件(它们将具有相同的布局)。然后使用主窗体作为浏览器来显示不同的内容控件,如页面。
例:
Main_Usr
表单上创建所需的布局。- 不要将其设置为 mdiContainer
- 如果要访问某些控件(例如子窗体中的页脚或页眉),请将这些控件的属性
Modifiers
设置为受保护) - 打开
Ordre_Liste
表单代码并将其更改为从表单继承Main_Usr
而不是Form
- 向表单添加自定义内容
Ordre_Liste
瞧!你有"母版页"
更新(对于第三个选项)
- 使用名称
MasterUserControl
创建新的用户控件 - 在此控件上创建所需的布局,为自定义内容保留空间(顺便说一句,不要使用 TableLayoutPanels - 它们在设计器继承方面存在问题)。
- 使用名称
HomeUserControl
创建新的用户控件,并将其更改为从MasterUserControl
继承。 - 打开设计器
HomeUserControl
并添加自定义内容。您还可以修改父控件,该控件具有protected
修饰符。 - 在您的主表单上放置
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 循环中关闭(或处置)它们,就会出现错误。这就是为什么您需要将它们放入列表中并在那里关闭它们的原因。