如果返回的页面不存在"<!-- CURCON-->",那么IndexOf返回-1,再用Substring时,就报错了。可以这样改一下:
1.start = HTML.IndexOf("<!-- CURCON-->",0,HTML.Length); 
stop = HTML.IndexOf("<!-- END CURCON-->",0,HTML.Length); 
if (start == -1) start = 0;
if (stop == -1) stop = HTML.Length;
temp = HTML.Substring(start, stop - start); 2.start = temp.IndexOf("<b>"); 
stop = temp.IndexOf("</b>");
if (start == -1) start = 0;
if (stop == -1) stop = temp.Length; 
string degree = temp.Substring(start+3,stop - start -3); 3.start = temp.IndexOf("<img"); 
if (start == -1) start = 0;
stop = temp.IndexOf("</td>",start); 
if (stop == -1) stop = temp.Length;
string img = temp.Substring(start,stop - start);

解决方案 »

  1.   

    我测试通过了,不过结果是不是应该跟预想的不一样吧!
    结果显示了一个"Hello,Guest"和一个"Weather.com"的图片,是不是应该显示广州的天气?
    其实,我看这个例子,是想能够活血活用,比如改一改样式、显示内容等,或者只显示一句话天气预报,变成自己的天气预报。
    在这方面你还有什么心得吗?我觉得源程序是在搜索Yahoo网页的一些字符串信息,然后显示我们需要的内容,这方面我一无所知,想跟你交流交流,谢谢!
      

  2.   

    WeatherCtrl.ascx页面
    <%@ Control Language="c#" AutoEventWireup="false" Codebehind="WeatherCtrl.ascx.cs" Inherits="Weather.WeatherCtrl" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
    <FONT face="宋体" size="8">
    <TABLE borderColor="#cc9966" cellSpacing="0" cellPadding="0" width="100%" border="0">
    <TR>
    <TD style="WIDTH: 71px"><font size="2">时间:</font></TD>
    <TD><asp:label id="Labeltime" runat="server">Label</asp:label></TD>
    </TR>
    <TR>
    <TD style="WIDTH: 71px"><font size="2">最低气温:</font></TD>
    <TD>
    <P><asp:label id="Labelbottom" runat="server">Label</asp:label></P>
    </TD>
    </TR>
    <TR>
    <TD style="WIDTH: 71px"><font size="2">最高气温:</font></TD>
    <TD>
    <P><asp:label id="Labeltop" runat="server">Label</asp:label></P>
    </TD>
    </TR>
    <TR>
    <TD style="WIDTH: 71px"><font size="2">上午:</font></TD>
    <TD>
    <asp:Label id="Labelmorning" runat="server">Label</asp:Label></TD>
    </TR>
    <TR>
    <TD style="WIDTH: 71px"><font size="2">下午:</font></TD>
    <TD>
    <asp:Label id="Labelafternoon" runat="server">Label</asp:Label></TD>
    </TR>
    </TABLE>
    </FONT>WeatherCtrl.cs文件
    namespace Weather
    {
    using System;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Web.SessionState; 
    using System.Net; 
    using System.IO;  /// <summary>
    /// WeatherCtrl 的摘要说明。
    /// </summary>
    public abstract class WeatherCtrl : System.Web.UI.UserControl
    {
    protected System.Web.UI.WebControls.Label Labeltime;
    protected System.Web.UI.WebControls.Label Labeltop;
    protected System.Web.UI.WebControls.Label Labelbottom;
    protected System.Web.UI.WebControls.Label Labelmorning;
    protected System.Web.UI.WebControls.Label Labelafternoon;
    public string City; private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面 }

    private string GetLastTdContent(string tr)
    {
    int start,stop,start2,i=0;
    string tempstr;
                start=0;
    start2=0;
    while(i!=3)
    {
    start2=start;
    start=tr.IndexOf("<td",start+3);
    i++;
    } stop=tr.IndexOf("</td>",start2);
    tempstr=tr.Substring(start2,stop-start2); start=tempstr.IndexOf(">",0,tempstr.Length-1);
    return tempstr.Substring(start+1); }
    private string GetImgContent(string img)
    {
    int start,stop;
    string tempstr;
    start=0;
        start=img.IndexOf("symbole/",0);
    stop=img.IndexOf(".gif",0);
    tempstr=img.Substring(start+8,stop-start-4); //start=tempstr.IndexOf(">",0,tempstr.Length-1);
    return tempstr; }
    private string GetALTContent(string img)
    {
    int start,stop;
    string tempstr;
    start=0;
    start=img.IndexOf("ALT=",0);
    stop=img.IndexOf("width",0);
    tempstr=img.Substring(start+5,stop-start-7); //start=tempstr.IndexOf(">",0,tempstr.Length-1);
    return tempstr; }
    public void GetWeather(string url)
    {
    WebRequest wreq=WebRequest.Create(url); 
    //wreq.Timeout=10;
                  
    HttpWebResponse wresp=(HttpWebResponse)wreq.GetResponse(); 
                         
    string HTML =""; 
    Stream s=wresp.GetResponseStream(); 
                     
    StreamReader objReader = new StreamReader(s,System.Text.Encoding.GetEncoding("GB2312"));  string sLine = ""; 
    int i = 0;  while (sLine!=null) 

    i++; 
    sLine = objReader.ReadLine(); 
    if (sLine!=null) 
    HTML += sLine; 

                     
    String temp= ""; 
    int start,stop; 
    string line1,line2,line3,line4,line5;
    string td1,td2,td3,td4,td5,img4,img5,alt4,alt5; start = HTML.IndexOf("<table width=\"415\" border=\"1\" cellspacing=\"0\" cellpadding=\"1\" BGCOLOR=\"#ffffff\">",0,HTML.Length);  stop = HTML.IndexOf("<tr>  <td align=\"left\" nowrap height=\"10\" colspan=\"4\"></td>  </tr> ",start)+8; 
                  temp = HTML.Substring(start, stop - start); 
    temp=temp +"</table>";
    HTML=temp;
    //get line1
    start=HTML.IndexOf("<tr",0,HTML.Length);
    stop=HTML.IndexOf("</tr>",start)+5;
    line1=HTML.Substring(start,stop-start);

    td1=GetLastTdContent(line1);
    start=HTML.IndexOf("<tr",stop,HTML.Length -stop);
    stop=HTML.IndexOf("</tr>",start)+5;
    line2=HTML.Substring(start,stop-start);

    td2=GetLastTdContent(line2);
    start=HTML.IndexOf("<tr",stop,HTML.Length -stop);
    stop=HTML.IndexOf("</tr>",start)+5;
    line3=HTML.Substring(start,stop-start);

    td3=GetLastTdContent(line3);
    start=HTML.IndexOf("<tr",stop,HTML.Length -stop);
    stop=HTML.IndexOf("</tr>",start)+5;
    line4=HTML.Substring(start,stop-start);
     img4=GetLastTdContent(line4);
    td4=GetImgContent(img4);
    alt4=GetALTContent(img4);
    td4="<img src=\"images/weather/"+td4+"\" ALT=\""+alt4+"\">"; start=HTML.IndexOf("<tr",stop,HTML.Length -stop);
    stop=HTML.IndexOf("</tr>",start)+5;
    line5=HTML.Substring(start,stop-start); img5=GetLastTdContent(line5);
    td5 =GetImgContent(img5);
    alt5=GetALTContent(img5);
    td5="<img src=\"images/weather/"+td5+"\" ALT=\""+alt5+"\">";
    //this.Labelafternoon.Text="<table>" +line1 + line2 +"</table>";
    this.Labeltime.Text=td1;
    this.Labelbottom.Text=td2;
    this.Labeltop.Text=td3;
    this.Labelmorning.Text=td4;
    this.Labelafternoon.Text=td5;
            } #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// 设计器支持所需的方法 - 不要使用
    /// 代码编辑器修改此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    }
    }