简体   繁体   English

在当前上下文中不存在C#

[英]Does not exist in current context c#

In my win forms app I have a listbox and a textbox the app gets email from a server and displays the subject etc in the listbox and when I click the listbox the body is shown in the textbox. 在我的Win Forms应用程序中,我有一个列表框和一个文本框,该应用程序从服务器获取电子邮件并在列表框中显示主题等,当我单击列表框时,正文显示在文本框中。 The problem is I have to repeat the entire code below in the selected index changed event to get it to work otherwise I get "does not exists in current context" error this slows down the app. 问题是我必须在选定的索引更改事件中重复下面的整个代码,以使其正常工作,否则我会收到“当前上下文中不存在”错误,这会使应用程序变慢。

// Create an object, connect to the IMAP server, login,
        // and select a mailbox.
        Chilkat.Imap imap = new Chilkat.Imap();
        imap.UnlockComponent("");
        imap.Port = 993;
        imap.Ssl = true;
        imap.Connect("imap.gmail.com");
        imap.Login("user@email.com", "pass");
        imap.SelectMailbox("Inbox");

        // Get a message set containing all the message IDs
        // in the selected mailbox.
        Chilkat.MessageSet msgSet;
        msgSet = imap.Search("ALL", true);

        // Fetch all the mail into a bundle object.
        Chilkat.EmailBundle bundle = new Chilkat.EmailBundle();
        bundle = imap.FetchBundle(msgSet);

        // Loop over the bundle and display the From and Subject.
        Chilkat.Email email;
        int i;
        for (i = 0; i < bundle.MessageCount - 1; i++)
        {

            email = bundle.GetEmail(i);
            listView1.Items.Add(email.From + ": " + email.Subject).Tag = i;


            richTextBox1.Text = email.Body;

        }

        // Save the email to an XML file
        bundle.SaveXml("bundle.xml");

and here is the code I would like to get to work in the selected index changed event: 这是我想要在选定的索引更改事件中工作的代码:

 if (listView1.SelectedItems.Count > 0)
        {
            richTextBox1.Text = bundle.GetEmail((int)listView1.SelectedItems[0].Tag).Body;
        }

When I use this code I get the error "bundle does not exist in the current context"; 使用此代码时,出现错误“当前上下文中不存在捆绑软件”; how do I fix this error? 如何解决此错误?

It seems that you have to redesign your code so that the object you are interested in is available in the context that needs it. 似乎您必须重新设计代码,以便您感兴趣的对象在需要它的上下文中可用。 One solution might be: 一种解决方案可能是:

class Form1
{
 ...

 // You need to have the bundle available in your event handler, so it should be 
 // a field (or property) on the form:
 Chilkat.EmailBundle bundle;

 // Call this e.g. on start up and possibly when a
 // refresh button is clicked:
 protected void RefreshMailBox()
 {
  Chilkat.Imap imap = new Chilkat.Imap();
  imap.UnlockComponent("");
  imap.Port = 993;
  imap.Ssl = true;
  imap.Connect("imap.gmail.com");
  imap.Login("user@email.com", "pass");
  imap.SelectMailbox("Inbox");

  Chilkat.MessageSet msgSet = imap.Search("ALL", true); 
  bundle = imap.FetchBundle(msgSet);
 }

 protected void YourEventHandler()
 {
  if (listView1.SelectedItems.Count > 0)
  {
   // bundle is now accessible in your event handler:
   richTextBox1.Text = bundle.GetEmail((int)listView1.SelectedItems[0].Tag).Body;
  }
 }

 ...
}

Check the project properties and make sure both project are targeting the same framework. 检查项目属性,并确保两个项目都针对相同的框架。 usually this happens when one if pointing to .Net Framework 4 and another to .Net Framework 4 Client Profile 通常,当一个指向.Net Framework 4而另一个指向.Net Framework 4 Client Profile时,会发生这种情况

Thanks, Sebastian 谢谢塞巴斯蒂安

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM