Не существует в текущем контексте c # - PullRequest
0 голосов
/ 16 октября 2010

В моем приложении win forms у меня есть список и текстовое поле, приложение получает электронную почту с сервера, отображает тему и т. Д. В списке, а когда я щелкаю список, тело отображается в текстовом поле. Проблема в том, что мне нужно повторить весь код ниже в выбранном событии изменения индекса, чтобы заставить его работать, в противном случае я получаю ошибку «не существует в текущем контексте», которая замедляет работу приложения.

// 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");

и вот код, который я хотел бы получить для работы с выбранным событием изменения индекса:

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

Когда я использую этот код, я получаю ошибку «пакет не существует в текущем контексте»; как я могу исправить эту ошибку?

Ответы [ 2 ]

1 голос
/ 16 октября 2010

Кажется, что вам нужно изменить код так, чтобы интересующий вас объект был доступен в нужном вам контексте.Одним из решений может быть:

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;
  }
 }

 ...
}
0 голосов
/ 24 июня 2012

Проверьте свойства проекта и убедитесь, что оба проекта нацелены на одну и ту же структуру. обычно это происходит, когда один указывает на .Net Framework 4, а другой - на .Net Framework 4 Client Profile

Спасибо, Себастьян

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...