为什么用goto?把循环放函数里,
button1和button2都去调用这个函数不就得啦

解决方案 »

  1.   

    button1里面的代码拎出来,写个函数。需要goto的地方去调用这个函数。
      

  2.   

    不能直接goto到另一个函数的内部,可以把需要goto到的代码单独写一个函数,直接goto到这个函数
      

  3.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    using System.Net;
    using mshtml;
    using System.Threading;
    namespace WindowsFormsApplication16
    {
        public partial class Form1 : Form
        {
            private IHTMLTxtRange searchRange = null;
                 
            public Form1()
            {   
        
                InitializeComponent();
                webBrowser1.Navigate("http://www.taobao.com");
                      
            }
           
           private void button1_Click(object sender, EventArgs e)
                
            {       
                string a;
                a = textBox1.Text;
                HtmlElementCollection elems = webBrowser1.Document.GetElementsByTagName("INPUT");
                foreach (HtmlElement elem in elems)
                {
                    if (elem.GetAttribute("name").ToString() == "q")
                        elem.SetAttribute("value", a);
                }            HtmlElementCollection elems1 = webBrowser1.Document.GetElementsByTagName("BUTTON");
                foreach (HtmlElement elem in elems1)
                {
                    if (elem.GetAttribute("type").ToString() == "submit")
                        elem.InvokeMember("click");
                                  
                }
                yanshi();
            
                }          
            void yanshi()
           {
             
                 timer1.Tick += new EventHandler(timer1_Tick);
                   timer1.Interval = 10000;
                   timer1.Enabled = true;
                      }       void timer1_Tick(object sender, EventArgs e)
           {
               sousuo();       }       private void sousuo()
           {
               //Document的DomDocument属性,就是该对象内部的COM对象。            IHTMLDocument2 document = (IHTMLDocument2)webBrowser1.Document.DomDocument;
               string keyword = txtKeyword.Text.Trim();
               if (keyword == "")
                   return;           // IE的查找逻辑就是,如果有选区,就从当前选区开头+1字符处开始查找;没有的话就从页面最初开始查找。 
               // 这个逻辑其实是有点不大恰当的,我们这里不用管,和IE一致即可。 
               if (document.selection.type.ToLower() != "none")
               {
                   searchRange = (IHTMLTxtRange)document.selection.createRange();
                   searchRange.collapse(true);
                   searchRange.moveStart("character", 1);
               }
               else
               {
                   IHTMLBodyElement body = (IHTMLBodyElement)document.body;
                   searchRange = (IHTMLTxtRange)body.createTextRange();
               }           // 如果找到了,就选取(高亮显示)该关键字;否则弹出消息。 
               if (searchRange.findText(keyword, 1, 0))
               {
                   searchRange.select();
                   MessageBox.Show("zhaodao");
               }
               else
               {
                               
                   HtmlElementCollection elems1 = webBrowser1.Document.GetElementsByTagName("SPAN");
                   foreach (HtmlElement elem in elems1)
                   {
                       if (elem.GetAttribute("classname")== "icon-btn-next-2")
                           elem.InvokeMember("click");
                       yanshi();
                   }               
                  }
                       }
       
        }}
      

  4.   

    上面是全部的代码。
    button是打开淘宝搜索一个宝贝,然后去找那个掌柜。我弄上程序界面。
    现在可以点那个下一页,但是到了第二页没反应了。也不知道有没有在第二页去搜索这个掌柜。
    就是希望点下一页,然后看看有没有这个掌柜,没有点下一页,然后间隔10面,再看看有没有这个掌柜,没有就再点下一页。
      

  5.   

    逻辑有问题啊.
    你本来是想等10秒再点,但是你把点击的代码放到了sousou的else里
    结果刚搜了一下,没搜到,没等搜完就直接点下一页了.
    然后隔了10秒又执行一次sousou,又是没搜完就点了.
      

  6.   

    首先你确定第二页里的next按钮名称和第一页相同?
    if (elem.GetAttribute("classname")== "icon-btn-next-2")
    这不是跳转到第二页了么,每次都跳转到同一页?然后你timer_tick执行完毕,要将事件解除.否则下次又给它绑定了一个事件,就是2个timer在跑了.
      

  7.   

    第二页按钮和第一个相同,我刚刚也查到点timer的事,只是想到要继续一个timer1.
    怎么把timer1解除,并且再开启timer1.谢谢。
      

  8.   

    不建议用goto.
    直接调那个方法就可以。
      

  9.   

     timer1.Tick += new EventHandler(timer1_Tick);
                   timer1.Interval = 10000;
                   timer1.Enabled = true;事件只在一开始绑定一次,后面控制 timer1.Enabled就行了
    不要老去绑定事件解除事件,怪麻烦的.
      

  10.   

    还请老大明示
      else
               {
                               
                   HtmlElementCollection elems1 = webBrowser1.Document.GetElementsByTagName("SPAN");
                   foreach (HtmlElement elem in elems1)
                   {
                       if (elem.GetAttribute("classname")== "icon-btn-next-2")
                           elem.InvokeMember("click");
                       timer1.Enabled = false;
                       yanshi();
                   }
    这样吗
      

  11.   

    不自己弄了。
    我在猪八戒发了一个任务,初步200元。
    http://task.zhubajie.com/4266955/
    谢谢大家。
      

  12.   

    GOTO到函数内部?如果知道函数调用的原理就不会有如此不切实际的想法了.
    要调用一个函数的时候,总是希望能够安全返回,所以调用的时候需要将返回地址压入堆栈,在返回的时候用,
    如果直接就GOTO到内部,那在返回的时候就知道往哪儿去了.