winform里面有一个webBrowser1,我通过webBrowser1.Navigate(WebUrl.ToString())的方法打开一个网页,触发webBrowser1_DocumentCompleted事件得到webBrowser1.Document.Body.InnerText的值。代码如下(红色部分求助):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace TranslationEngine
{
    public partial class Translate : Form
    {
        public Translate()
        {
            InitializeComponent();
        }        private void btnTranslation_Click(object sender, EventArgs e)
        {
        }
        public string GetReuslt(string OrgString, string TranslateMode)
        {
            StringBuilder WebUrl = new StringBuilder(@"http://translate.google.com/translate_t#");            switch (TranslateMode)
            {
                case "zh-CN|en|":
                    WebUrl.Append("zh-CN|en|"+OrgString);
                    break;                case "en|zh-CN|":
                    WebUrl.Append("en|zh-CN|" + OrgString);
                    break;
            }            webBrowser1.Navigate(WebUrl.ToString());
            
目的使txtResult.Text得到webBrowser1_DocumentCompleted事件完成以后webBrowser1.Document.Body.InnerText的值,代码应该怎么写?            return txtResult.Text;
        }
        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            txtResult.Text = webBrowser1.Document.Body.InnerText;
        }
    }
}

解决方案 »

  1.   

         private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
            { 
                txtResult.Text = webBrowser1.Document.Body.InnerText; 
            } 这里不是已经都获取了值了吗
      

  2.   


    我希望通过GetReuslt函数获取返回值
    public string GetReuslt(string OrgString, string TranslateMode) 
      

  3.   


    你不想在这个事件里面txtResult.Text = webBrowser1.Document.Body.InnerText; 加上这句???
      

  4.   

    txtResult.Text = webBrowser1.Document.Body.InnerText; 直接把这句放上面的方法里面不行么?
      

  5.   

    不行该事件private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    是读取网页完成后得到的直接放上面txtResult.Text得不到值的
      

  6.   

    那你就在这里判断一下webBrowser1_DocumentCompleted相关的事件是否已经调用。如果调用了再
    txtResult.Text = webBrowser1.Document.Body.InnerText; 
      

  7.   

    想了一下好像不行。如果不在这个事件里面添加内容private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
      

  8.   

    很显然,你的GetReuslt方法只是激活去访问一个网页
    而你要获取的值必须是加载完成后才能获得。
    所以…… 你陷入了一个误区 我换个写法你一下就能明白、
     
     public void GetReuslt(string OrgString, string TranslateMode) 
            { 
                StringBuilder WebUrl = new StringBuilder(@"http://translate.google.com/translate_t#");             switch (TranslateMode) 
                { 
                    case "zh-CN|en|": 
                        WebUrl.Append("zh-CN|en|"+OrgString); 
                        break;                 case "en|zh-CN|": 
                        WebUrl.Append("en|zh-CN|" + OrgString); 
                        break; 
                }             webBrowser1.Navigate(WebUrl.ToString()); 
            }         string strRes;
            private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
            { 
                 strRes= webBrowser1.Document.Body.InnerText; 
                 txtResult.Text=strRes;
                 //strRes 这个的获得必须写在这里,其以后的处理最好也写在这里,以为只有在这以后才能保证同步
            } 
      

  9.   

    你的这样做法我也想过,但是我如果在另一个项目调用Translate类中txtResult.Text这个值,应该如何去写呢,怎么才能动态的得到这个private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 事件完成后真正的值。
      

  10.   


    我上面的代码我是准备封装成一个类库,别的项目可以通过实例化Translate类,从GetResult这个函数得到值。在书委托上看得不够明白,能否将我的代码改一下便于学习?