質問

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

このコードを使用すると、「現在のコンテキストではバンドルが存在しません」というエラーが表示されます。このエラーを修正するにはどうすればよいですか?

役に立ちましたか?

解決

興味のあるオブジェクトがそれを必要とするコンテキストで利用できるように、コードを再設計する必要があるようです。解決策の1つは次のとおりです。

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

 ...
}

他のヒント

プロジェクトのプロパティを確認し、両方のプロジェクトが同じフレームワークをターゲットにしていることを確認してください。通常、これは.NETフレームワーク4を指している場合に発生し、もう1つは.NETフレームワーク4クライアントプロファイルを指しています。

ありがとう、セバスチャン

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top