0

调用新窗口时如何关闭打开的窗口?这意味着我当时只想要 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();
        }
    }
4

3 回答 3

1

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

    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();
}
于 2012-04-25T13:56:35.810 回答
1

有不同的方法来实现伪母版页:

  • 您可以创建具有所需布局的 BaseForm 表单。然后从这个 BaseForm 继承其他表单并提供自定义内容。
  • 您可以创建具有所需布局的 MainForm 表单。然后将内容控件创建为 UserControls 并在面板中显示它们。
  • 您可以创建具有所需布局的 MasterUserControl。然后通过从 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

有不同的方法来实现控件(又名页面)之间的导航。最简单的方法 - 在主窗体上有菜单。其他方式 - 在主控件上定义事件“导航”,在主窗体上订阅该事件,并从“页面”中引发它。

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

于 2012-04-25T14:02:16.447 回答