VB.net:对象未设置为对象的实例

时间:2011-01-27 20:41:37

标签: vb.net

我得到一个Object未设置为对象错误的实例。我已经列出了一个列表视图,其中应显示所有消息。我正在使用移植到vb.net的lumisoft sample code

 Private Sub FillMessagesList()
        Me.Cursor = Cursors.WaitCursor
        Try
            Dim m_pPop3 As POP3_Client = Nothing
            For Each message As POP3_ClientMessage In m_pPop3.Messages
                Dim mime As Mail_Message = Mail_Message.ParseFromByte(message.HeaderToByte())

                Dim item As New ListViewItem()
                If mime.From IsNot Nothing Then
                    item.Text = mime.From.ToString()
                Else
                    item.Text = "<none>"
                End If

                If String.IsNullOrEmpty(mime.Subject) Then
                    item.SubItems.Add("<none>")
                Else
                    item.SubItems.Add(mime.Subject)
                End If

                item.SubItems.Add(mime.[Date].ToString())
                item.SubItems.Add(CDec(message.Size / CDec(1000)).ToString("f2") & " kb")
                item.Tag = message
                ListView1.Items.Add(item)
            Next
        Catch x As Exception
            MessageBox.Show(Me, "Errorssssss: " + x.Message)
        End Try
        Me.Cursor = Cursors.[Default]
    End Sub

3 个答案:

答案 0 :(得分:1)

问题在于:

Dim m_pPop3 As POP3_Client = Nothing
For Each message As POP3_ClientMessage In m_pPop3.Messages

您将m_pPop3设置为Nothing,然后尝试访问其中一个成员。

你说你移植了代码 - 也许你需要回顾原始代码并正确移植它:

private POP3_Client m_pPop3 = null;

/// <summary>
/// Default constructor.
/// </summary>
public wfrm_Main()
{
    InitUI();

    this.Visible = true;

    wfrm_Connect frm = new wfrm_Connect(
        new EventHandler<WriteLogEventArgs>(Pop3_WriteLog));
    if(frm.ShowDialog(this) == DialogResult.OK){
        m_pPop3 = frm.POP3; 
    // etc...
}

private void FillMessagesList()
{
    this.Cursor = Cursors.WaitCursor;
    try{
        foreach(POP3_ClientMessage message in m_pPop3.Messages){
        // etc...
    }
}

请注意m_pPop3.Messages是私有成员,而不是您实现的本地变量。

要更正您的代码,我建议将其更改为与原始代码更相似。将局部变量更改为私有成员并在构造函数中设置它,就像原始C#代码一样。

答案 1 :(得分:0)

罪魁祸首可能来自两行代码:

 Dim m_pPop3 As POP3_Client = Nothing
            For Each message As POP3_ClientMessage In m_pPop3.Messages

您正在尝试遍历“m_pPop3”中的消息,但您已明确将其设置为直接位于上方的行。

答案 2 :(得分:0)

我猜它就在这里,因为你将m_pPop3设置为Nothing。如果您已经完成了代码,它会告诉您。

Dim m_pPop3 As POP3_Client = Nothing
For Each message As POP3_ClientMessage In m_pPop3.Messages