2010-10-16 18 views
0

Dans mon application de formulaires de victoire j'ai une liste et une zone de texte l'application reçoit un courriel d'un serveur et affiche le sujet etc dans la liste et lorsque je clique sur la liste, le corps est affiché . Le problème est que je dois répéter l'ensemble du code ci-dessous dans l'événement sélectionné index modifié pour le faire fonctionner sinon je reçois l'erreur "n'existe pas dans le contexte actuel" cela ralentit l'application.N'existe pas dans le contexte actuel C#

// 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("[email protected]", "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"); 

et voici le code que je voudrais aller travailler dans l'index sélectionné événement a changé:

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

Lorsque j'utilise ce code je reçois le paquet erreur »n'existe pas dans le courant le contexte"; comment réparer cette erreur?

Répondre

1

Il semble que vous deviez redessiner votre code afin que l'objet qui vous intéresse soit disponible dans le contexte qui en a besoin. Une solution peut être:

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("[email protected]", "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

ne fonctionnerait pas d'autres idées – Shane121

+0

Nous aurions besoin de plus d'informations sur ce qui ne fonctionne pas là-bas . Le paquet devrait maintenant être au moins dans le contexte de l'événement. – steinar

+0

le débogueur dit que le bundle dans la 1ère ligne est déclaré mais jamais utilisé et les deux autres paquets ne sont pas dans le contexte – Shane121

0

Vérifiez les propriétés du projet et assurez-vous que les deux projets ciblent la même infrastructure. Cela se produit généralement quand on se pointant vers Net Framework 4 et un autre à NET Framework 4 Client Profile

Merci, Sebastian