【问题标题】:How to pass a value from one function to another in event handler methods in c#如何在 C# 中的事件处理程序方法中将值从一个函数传递到另一个函数
【发布时间】:2015-04-28 18:41:43
【问题描述】:

我使用 web 客户端填充了列表框,我使用了 for-loop 将对象与 json 响应分开以供我使用,我需要在整个类中使用这些对象,即我需要在所有方法中使用这些值,如果可以从一种方法传递到另一种方法甚至是可行的

代码:

void Downloadpage()
{
    WebClient webclient = new WebClient();

    webclient.Headers["ContentType"] = "application/json";
    webclient.DownloadStringCompleted += wc_downloadStringCompleted;
    webclient.DownloadStringAsync(new Uri("http://client.web.net/pages_wp.php"), UriKind.RelativeOrAbsolute);          
}

public void wc_downloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    string lreport = e.Result.ToString();
    string lnoHTMLs = Regex.Replace(lreport, @"<[^>]+>|&nbsp;|&zwnj;|&raquo;|&laquo;|&ldquo;|\\n|\\t|", "", RegexOptions.Multiline).Trim();
    string lnoHTMLNormaliseds = Regex.Replace(lnoHTMLs, @"\s{2,}", " ");


    JArray res = JArray.Parse(lnoHTMLNormaliseds);
news = new List<jsons>();


            string rId = res[0]["raportId"].ToString();            ---->a
            string rTitle = res[0]["raportTitle"].ToString();      --->b
            news.Add(new jsons() { raportId = rId, raportTitle = rTitle});


        Presslist.ItemsSource = news;
}

我需要在另一个按钮单击事件中访问“a”和“b”中的值,如下所示

private void Add_to_cart(object sender, EventArgs e)
{
   //values need to come here
}

注意: Add_to_cart 在按钮点击时触发

【问题讨论】:

  • 使用类级变量。
  • 没听懂,你有几个rIdrTitle。您希望所有这些都以其他方法存储和访问?
  • 您有多个rIdrTitle。您需要在按钮点击事件中访问哪些
  • 我只有 rId 和 rTitle,是的,我需要它们才能访问
  • 您正在使用foreach 枚举JArray,并将每个rIdrTitle 分配给List&lt;json&gt;rIdrTitle显然不止一个

标签: c# windows-phone-8 windows-phone-8.1 c#-5.0


【解决方案1】:

使变量类级别

String _rId ="";
String _rTitle ="";

void Downloadpage()
{
    WebClient webclient = new WebClient();

    webclient.Headers["ContentType"] = "application/json";
    webclient.DownloadStringCompleted += wc_downloadStringCompleted;
    webclient.DownloadStringAsync(new Uri("http://client.web.net/pages_wp.php"),
UriKind.RelativeOrAbsolute);          
}

public void wc_downloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    string lreport = e.Result.ToString();
    string lnoHTMLs = Regex.Replace(lreport, @"<[^>]+>|&nbsp;|&zwnj;|&raquo;|&laquo;|&ldquo;|\\n|\\t|", "", RegexOptions.Multiline).Trim();
    string lnoHTMLNormaliseds = Regex.Replace(lnoHTMLs, @"\s{2,}", " ");


    JArray res = JArray.Parse(lnoHTMLNormaliseds);
news = new List<jsons>();


            string rId = res[0]["raportId"].ToString();           // ---->a
            string rTitle = res[0]["raportTitle"].ToString();     // --->b
            news.Add(new jsons() { raportId = rId, raportTitle = rTitle});
            _rId = rId;
            _rTitle = rTitle;


        Presslist.ItemsSource = news;
}

private void Add_to_cart(object sender, EventArgs e)
{
   //values need to come here
   //_rId
   //_rTitle
}

【讨论】:

  • 如果不使其成为类级别,则可以在方法之间传递任何选项
  • 我看不出没有类级变量你怎么能做到这一点。由于您希望从事件“Add_to_cart”中访问它们,因此它们需要存在于可以从该函数范围内访问的某个位置。
【解决方案2】:

我认为您调用Downloadpage() 方法的地方可以将这些值保存在一个公共位置。可能是Session LevelApplication level 空格。

我认为Add_to_cart() 方法是一个按钮单击事件,因此应该在页面加载事件或显示 UI 之前的任何事件中调用 DownloadPage。 当Add_to_cart() 被调用时,您可以检索这些值并使用它们。

【讨论】:

    猜你喜欢
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    相关资源
    最近更新 更多