在窗体外部还是内部?在外部可以使用以下代码: /// <summary> /// 指定一个类型,返回该类型的窗体实例 /// </summary> /// <param name="frmType"></param> /// <returns></returns> public static Form GetForm(Type frmType) { foreach (Form item in Application.OpenForms) { if (item.GetType() == frmType) return item; } } 调用方法:Form frm = GetForm(typeof(FrmDBSet)); if (frm == null) frm = new FrmDBSet();
只能存在一个的Check.Dim processes() As Processprocesses = Process.GetProcessesByName(APP_PROC_NAME)If processes.Length > 0 Then Application.Exit() Exit Sub End If
楼主的描述是否应该是这样子:“在主程序打开某个类型的窗体,如果该类型的窗体已打开过,显示已打开的窗体,否则创建一个该类型的新窗体”,如果是这样的需求的话,可以参考我5楼的回复以及下面这段调用方法。 Form frm = GetForm(typeof(FrmDBSet)); if (frm == null) frm = new FrmDBSet();frm.Show(); frm.MdiParent=this;
当为TRUE 时说明打开状态
FALSE 关闭状态.
如果运行后只让他运行一次类似
甚至没区别..
/// <summary>
/// 指定一个类型,返回该类型的窗体实例
/// </summary>
/// <param name="frmType"></param>
/// <returns></returns>
public static Form GetForm(Type frmType)
{
foreach (Form item in Application.OpenForms)
{
if (item.GetType() == frmType)
return item;
}
}
调用方法:Form frm = GetForm(typeof(FrmDBSet));
if (frm == null)
frm = new FrmDBSet();
Exit Sub
End If
Form frm;
Button_OnClick(XXXXXXXXX)
{
if(frm==null)
{
frm=new Form();
frm.Show();
}
else
{
frm.Show();
}
}
在frm的Closing实践里面
e.Cancel=true;
this.Hide();就行了
就:
在Form_Load里面
Process process=Process.GetProcessByName("你的应用程序名字");
if(process!=null)
{
MessageBox("已经有一个实例运行了","提示");
Process.GetCureentProcess().Kill();
}
如果是主窗体,就去进程中搜索你的程序的进程,如果已经存在,则不能打开
如果是子窗体,那就在主窗体中设置一个标志,当打开一个子窗体的时候,这个标志置成true,在打开子窗体的时候,判断这个标志是否为true,如果是true,则不能打开子窗体
楼主的描述是否应该是这样子:“在主程序打开某个类型的窗体,如果该类型的窗体已打开过,显示已打开的窗体,否则创建一个该类型的新窗体”,如果是这样的需求的话,可以参考我5楼的回复以及下面这段调用方法。
Form frm = GetForm(typeof(FrmDBSet));
if (frm == null)
frm = new FrmDBSet();frm.Show();
frm.MdiParent=this;
bool AppFlag;
System.Threading.Mutex m = new System.Threading.Mutex(true, AppName, out AppFlag);
if (AppFlag)
{}