1,泛型+窗體創建檢查(無則創建)
private void ChildWinShow<T>() where T : Form, new()
{
foreach (var FormItem in Application.OpenForms)
{
var vForm = FormItem as T;
if (vForm != null)
{
vForm.Activate();
return;
}
}
T win = new T();
win.MdiParent = this;
win.ControlBox = false;
win.Dock = DockStyle.Fill;
win.Show();
}
2,Timer+委託+事件,不使用invoke來更新UI
例子:父子窗體
父窗體Timer調用子窗體的UI更新事件(注:將子窗體的UI更新事件在子窗體中封裝成函數,因爲類中事件只能在類中調用)