如题

解决方案 »

  1.   

    如果是MDI窗体,则可以查找MDI窗体集合
      

  2.   

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

  3.   

    这个好像只有用全局 Hook 才能实现了。
      

  4.   

    用一个全局的arrlist,当你打开窗口时给他加进去add,关闭时remove,这样你随时都可以访问arrlist了解你打开窗口的情况
      

  5.   

    各位的方法好像都不可以,不是MDI窗体,
    fengforever(风)的方法也不行,如果我有100个窗体那一个一个写太麻烦了
      

  6.   

    补充一点,是一个application里的窗口,不用全局钩子的
      

  7.   

    如果打开的窗体是其他程序的呢?比如IE,QQ,MSN...
      

  8.   

    打开的是都是我自己写的一个application里的窗体,怪我没有讲清楚
      

  9.   

    补充一点,是一个application里的窗口,不用全局钩子的
    ----------------------------这样问题就简单了:写一个基类——
    public class BaseForm : System.Windows.Forms.Form
    {
        public static ArrayList list = new ArrayList();    public BaseForm()
        {
    this.Load += new EventHandler(BaseForm _Load);
    this.Closed += new EventHandler(BaseForm_Closed);
        }    private void BaseForm_Load(object sender, System.EventArgs e)
        {
             if(!BaseForm.list.Contains(this))
                  BaseForm.list.Add(this);
        }    private void BaseForm_Closed(object sender, System.EventArgs e)
        {
             BaseForm.list.Remove(this);
        }}让所有 Form 都继承自 BaseForm调用 BaseForm.list 就可以获取所有打开窗体的实例了
      

  10.   

    换个问法就是如何找到一个c#程序里所有被实例化了的类型为Form的对象
      

  11.   

    qpl007(蓝色闪电)的方法很好,不过已经写了很多代码了,如果改的化比较麻烦,我是希望可以有不改变以前代码的情况下来解决这个问题,谢谢
      

  12.   

    你的Application总得有个Main窗体吧?
    MainForm.OwnedForms()就是已打开的实例窗体,但在打开窗体前先判断MainForm.OwnedForms()集合中是否已存在目标窗体,存在就可对此窗体进行操作,否则MainForm.AddOwnedForm(目标窗体)
      

  13.   

    谢谢大家,用了qpl007(蓝色闪电)的方法,非常感谢:)