-
Notifications
You must be signed in to change notification settings - Fork 0
/
MdiForm.cs
52 lines (48 loc) · 1.41 KB
/
MdiForm.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#if NETFRAMEWORK
using System;
using System.Windows.Forms;
namespace SharedTools
{
public class MdiForm : Form
{
protected MdiForm(Type startpage)
{
MdiPage page = (MdiPage)Activator.CreateInstance(startpage);
page.Dock = DockStyle.Fill;
Controls.Add(page);
}
public T NavigateTo<T>(Func<T> constructor) where T : MdiPage
{
if (InvokeRequired)
{
return this.InvokeGeneric(() => NavigateTo<T>(constructor));
}
else
{
T pageInstance = null;
foreach (Control control in Controls)
{
if (pageInstance == null && control is T)
{
pageInstance = (T)control;
control.Visible = true;
}
else
{
control.Visible = false;
}
}
if (pageInstance != null) return pageInstance;
pageInstance = constructor();
pageInstance.Dock = DockStyle.Fill;
Controls.Add(pageInstance);
return pageInstance;
}
}
public T NavigateTo<T>() where T : MdiPage, new()
{
return NavigateTo(() => new T());
}
}
}
#endif