本帖最后由 hellotest55 于 2014-06-19 15:00:57 编辑

解决方案 »

  1.   

    你在循环外面实例窗口 在循环内赋值,当然是都覆盖了.....把Form2 frm = new Form2();放进循环里..
      

  2.   

    回1楼,由于webroswse的特性,必须保持一个时间只能有一个执行,才能做到cookie不覆盖。我在子窗体的操作不是简单的打开网页,设计到一些复杂操作。。
      

  3.   


    Form2 frm = null; 
                //请问这里如何做到打开N个窗口互不影响,这里  for (int i = 0; i < 1; i++) 打开一个窗口时正常的。
                //这里正常的话应该弹出的是 www.063.com ,www.163.com,为什么弹出的都是www.163.com
                for (int i = 0; i < 2; i++)
                {
                    frm = new Form2();
                    frm.Visible = true;
                    frm.webBrowser1.Navigate("http://www."+Convert .ToString (i )+"63.com");
                    //回调子页面的参数到主页面
                    frm._delegateGetCookieMethod += new Form2.DelegateGetCookieMethod(GetCookie);
     
                }
      

  4.   

    回3楼,由于webroswse的特性,必须保持一个时间只能有一个执行,才能做到cookie不覆盖。所以只能开一个form2
      

  5.   

    你的实例只有1个...当然无法执行多个窗口的操作..要么不同的窗口的cookie取名加上窗口标识来确保不覆盖,要么就操作一个完成后再完成下一个,也就是把整个操作过程放进循环.
      

  6.   

    回5楼, Form2 frm = new Form2()放进循环内,会同时打开N个子窗口。有没有办法做到 一次打开一个窗口,顺序执行
      

  7.   


                    frm.webBrowser1.Navigate("http://www."+Convert .ToString (i )+"63.com");
                    //回调子页面的参数到主页面
                    frm._delegateGetCookieMethod += new Form2.DelegateGetCookieMethod(GetCookie);
                    frm.ShowDialog();
      

  8.   

    首先,frm._delegateGetCookieMethod += new Form2.DelegateGetCookieMethod(GetCookie); 
    要放到循环外面,不然你form的._delegateGetCookieMethod就会获得很多个重复的cookie,然后你说的,就是把整个操作都包在循环里,也就是把你子窗口的操作也加到主窗口的循环中,,那就是要使用别的委托了..
      

  9.   

    7楼代码貌似不对吧。
    8楼,能说的细点吗。其实请求一个页面,就应该有一个代理回传,不然怎么返回数据,所以代理放到FOR里面应该没错吧
      

  10.   

    frm._delegateGetCookieMethod += new Form2.DelegateGetCookieMethod(GetCookie); 这个是给frm的_delegateGetCookieMethod事件注册方法用的,你在循环里写,第1遍执行_delegateGetCookieMethod事件就已经有了一个GetCookie的方法了,第2遍执行就会再增加一个GetCookie的方法,到第3次执行时你得到的frm里的_delegateGetCookieMethod 事件,就会执行3次GetCookie的方法...
    事实上你只需要注册1次,frm的_delegateGetCookieMethod 事件里就有GetCookie了...
      

  11.   

    10楼你说的就是我代码里面写的啊注册事件没问题我的问题是回调函数cookie重复覆盖
      

  12.   

    怎么会没有问题..你的写法GetCookie执行了3次,cookie还不重复覆盖?
      

  13.   

    感觉好疑惑代码就几十行。我把代码上传到空间上VS2012的工程求大侠帮忙看下http://pan.baidu.com/s/1pJBbNCZ
      

  14.   

    可考虑把 URL 和 GetCookie中的参数做成一个对应的集合,如Hashtable 
    根据当前的URL 使用相应的参数(从集合中取)
      

  15.   

    回12楼大侠。。效果实际上要 一个一个开子窗口,然后在执行页面操作,大概7,8个页面,然后会回传cookie。怎么避免每次cookie重复。
      

  16.   

    你的GetCookie顶多就是判断你当前窗体是哪个web,然后生成一个cookie,,但是在同一个窗体里执行3次getcookie 不覆盖才出鬼了.
      

  17.   

    我如果想达到  开子窗口执行webbrowse做些点击操作,然后把cookie回传到子窗口,然后做POST操作。如此不停的回传。。怎么控制逻辑呢
      

  18.   

    Quote: 引用 9 楼 hellotest55 的回复:

    7楼代码貌似不对吧。
    Quote:

    frm._delegateGetCookieMethod += new Form2.DelegateGetCookieMethod(GetCookie);
    frm.ShowDialog();
    这两句没问题吧,url通过构造函数或者公共变量传过去,在Form2初始化里再给webBrowser1加载
      

  19.   

    18楼。问题不是你说的那个。。
    19楼。。注册代码放到外面。getcookie只执行一次。。必须注册n次的
      

  20.   

    其实有好多种方法,比较简单的两种:ShowDialog()可以阻断后续代码运行,可以实现顺序打开。也可以去掉循环,改在回调函数里再次调用click事件,这也是一种。
      

  21.   

    你循环就不能放form2里做么
    这样一次一次的开窗口?
    而且你现在的做法也仅仅是将form2隐藏了,然后重新调用了一遍form2里的方法,跟直接在form2里循环有什么区别么...而且你居然将form2里的webBrowser1设置成全局的,在form1里直接对form2的控件进行操作,这设计思路...
    你应该在form2里定义个全局的string数组,通过form1传进去
    form2自己调控件,用数组给URL赋值.
      

  22.   

    Cookie也建立个数组,判断是哪次循环返回的,存放到对应的位置去
    都放同一个变量里,怎么不覆盖...
      

  23.   

    回复 21楼。原来你说的方法可行不好意思。
    回复22楼。设计思路先不说了汗。。循环如果放进form2新开窗口,就一下弹出N个窗口,和设计思路冲突而且N个窗口弹出,我不好控制cookie...不同的用户会互相影响webbrowse貌似是actvie控件
      

  24.   

    23楼,这个 主窗口 存放COOKIE,当然要做的。。
    24楼。。具体点。求教21楼。。我试了下ShowDialog()可以阻断后续代码运行,对于窗口有效我这里如果在字窗口加上webbrowse控件,貌似就失效了你说的第二种发放,回传事件中重新触发click,应该可行的多谢提供思路。。