日期:2014-05-19  浏览次数:20910 次

请问如何获取当前打开的所有窗体???在线等!!!
我有一个form,每次show的时候都赋给他一个不同的text,以保证拥有相同text的form不能被打开第二次,拥有不同名称的这个form可以被多次打开!!!

我将每次赋的text放进一个arraylist中。如果后来的text在这个arraylist中可以找到,那么就将拥有这个text的form.BringToFront。如果没有,则直接show。

现在的问题就是不知道该怎么确定出拥有这个text的form是哪一个form。我想是不是可以用foreach遍历所有已打开form的text,来达到这个目的!!!

请问各位大虾,我该怎么多!!!

------解决方案--------------------
2005下使用:
/// <summary>
/// 查找是否已创建窗体
/// </summary>
/// <param name= "FormName "> 窗体Name </param>
/// <returns> </returns>
public static bool SearchAllForm(string FormName)
{
for (int i = 0; i < Application.OpenForms.Count; i++)
{
if (Application.OpenForms[i].Name == FormName)
{
return true;
}
}
return false;
}


2003下使用:

[DllImport( "User32.dll ", EntryPoint = "FindWindow ")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport( "user32.dll ", EntryPoint = "FindWindowEx ")] //找子窗体
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

[DllImport( "User32.dll ", EntryPoint = "SendMessage ")] //用于发送信息给窗体
private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);


/// <summary>
/// 查找是否已创建窗体
/// </summary>
/// <param name= "FormTitle "> 标题名称 </param>
/// <returns> </returns>
public static bool SearchForm(string FormTitle)
{
IntPtr ParenthWnd = new IntPtr(0);
IntPtr EdithWnd = new IntPtr(0);

//查到窗体,得到整个窗体
ParenthWnd = FindWindow(null,FormTitle);
if (!ParenthWnd.Equals(IntPtr.Zero))
{
return true;
}
else
{
return false;
}

}