public partial class Form1 : BaseForm ...
public partial class Form2 : BaseForm ...
// 根据formString 参数显示对应的窗体
switch(formString)
{
case "Form1":
ShowForm<Form1>();
break;
case "Form2":
ShowForm<Form2>();
break;
}
如果有100个窗体,那就歇菜了,有没有类似 Eval("ShowForm<"+formString+">()") 的方法直接执行?
/// <summary>
/// 显示窗体
/// </summary>
/// <typeparam name="T"></typeparam>
public void ShowForm<T>()where T : BaseForm, new()
{
}泛型
解决方案 »
- C#读取诺基亚手机最新拍摄的照片
- 页面启动的问题?
- 问一个很弱智的问题
- C# 如何获取服务器时间.>
- [10分赚30,当天结帐]请问我生成一个字符串,是一个XML格式的,放在textBox中,现在想双击textBox,打开一个IE显示这个XML格式的串怎么弄呢?
- [散分]Beginning C# Objects中文版--概念到代码--->>>要答案
- 数据库同时只能有一个连接?
- 请教: 较难的编译错误:
- 程序缺少了一个方法,应该怎样分析,把一个程序写完整呢?希望大家给个思路,谢谢.
- 我想知道如何在Oracle上跨数据库查询和插入
- C# winform datatable中的数据导出到EXCEL2003
- 请问,这个正则表达式,哪里错了?
{
}就不行吗?编程当然是要越简单越好,能少用class、少用方法、少写代码,当然越少越好。如果要写就要懂得需求驱动,等你有了那么大的需求时才应该使用高级的设计。不要为了范型而范型。为了炫技往往把自己搞死,弄出来诡异和累赘的东西。
主要是ShowForm方法里实例单件用到了泛型,所以不得已 /// <summary>
/// 显示窗体,并置于最前端
/// </summary>
/// <typeparam name="T"></typeparam>
public void ShowForm<T>()where T : BaseForm, new()
{
if (this.ActiveMdiChild != null)
{
if (this.ActiveMdiChild is T) return;
else this.ActiveMdiChild.Close(); //关闭之前的窗体
}
if (this.LastMDIFormClosed)
{
T f = Singleton<T>.Instance; f.MdiParent = this;
f.Text = f.String_Subject;
f.WindowState = FormWindowState.Maximized;
f.Show();
f.BringToFront();
}
} /// <summary>
/// 泛型实现窗体实例单件化
/// </summary>
/// <typeparam name="T">窗体类</typeparam>
public static class Singleton<T> where T : BaseForm, new()
{
private static T m_Instance = null;
private static readonly object lockHelper = new object();
/// <summary>
/// 获取窗体的唯一实例
/// </summary>
public static T Instance
{
get
{
if (m_Instance == null)
{
lock (lockHelper)
{
if (m_Instance == null)
{
m_Instance = new T();
m_Instance.FormClosing += new FormClosingEventHandler(FormClosing);
m_Instance.FormClosed += new FormClosedEventHandler(FormClosed);
}
}
}
return m_Instance;
}
}
/// <summary>
/// 当窗体准备关闭之前发生
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void FormClosing(object sender, FormClosingEventArgs e)
{
m_Instance.OwnerForm.LastMDIFormClosed = false;
if (m_Instance.Modified)
{
switch (MessageBox.Show(m_Instance.String_SavingQuery, "保存提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1))
{
case DialogResult.Yes:
m_Instance.Save();
break;
case DialogResult.No:
break;
case DialogResult.Cancel:
e.Cancel = true;
break;
} }
}
/// <summary>
/// 当窗体关闭时将Instance置空
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void FormClosed(object sender, FormClosedEventArgs e)
{
m_Instance.OwnerForm.LastMDIFormClosed = true;
m_Instance = null;
}
}
请赐教。小弟.net水平确实一般,且两年多没写程序了,转行干建筑行业了最近搞一个自用的管理软件,才重拾VS的