2017-05-01 4 views
0

Ich habe ein bisschen Probleme mit einer Liste in vb.net.Listen in vb.net, kämpfen mit Struktur

Grundsätzlich versuche ich eine E-Mail zu senden, und der Benutzer kann aus 4 Optionen auswählen, um eine Kopie zu senden. Ich begann mit einer Reihe von if-Anweisungen, die prüften, ob ein Kontrollkästchen aktiviert war und ob es dann CC hinzugefügt wurde, aber das scheint nur eins hinzuzufügen. Also habe ich ccList erstellt, die Idee ist, dass es eine Liste von Strings erstellt und diese stattdessen zu cc hinzufügt. Ich bin nicht sicher, ob es funktioniert, aber wenn ich eine Pause in der zweiten, dritten oder vierten If hinzufüge, fällt es nicht hinein und geht immer nur durch die erste (wenn jedes Kontrollkästchen wahr ist). Wenn ich nur eins überprüfe, dann fällt es richtig in dieses ein.

If FSEmailAddress <> "" Then 
     Dim OutlookMessage As outlook.MailItem 
     Dim AppOutlook As New outlook.Application 
     Dim ccList As List(Of String) = Nothing 
     Try 

OutlookMessage = AppOutlook.CreateItem(outlook.OlItemType.olMailItem) 
       Dim Recipents As outlook.Recipients = OutlookMessage.Recipients 
      Recipents.Add(FSEmailAddress) 

      If email1.Checked = True Then 
       ccList.Add("[email protected]") 
      End If 

      If email2.Checked = True Then 
       ccList.Add("[email protected]; ") 
      End If 

      If email3.Checked = True Then 
       ccList.Add("[email protected]; ") 
      End If 

      If email4.Checked = True Then 
       ccList.Add("[email protected]; ") 
      End If 

      OutlookMessage.CC = ccList.ToString 

      OutlookMessage.Subject = responseVIN.Text & " was sent back to you by " & GetUserName() 
      'link = archive_dir & responseVIN.Text 
      OutlookMessage.Body = responseVIN.Text & " was returned To you" & vbCrLf & "Navigate To the following location To view the comments In the ReadMe file:" & vbCrLf & vbCrLf & archive_dir & responseVIN.Text & vbCrLf & vbCrLf & resAdvice.Text 
      OutlookMessage.BodyFormat = outlook.OlBodyFormat.olFormatHTML 
      OutlookMessage.Send() 
+1

'Also habe ich ccList ...' eigentlich Sie nichts erschaffen hat - Dieser Code deklariert nur eine Objektvariable. 'Dim ccList und New List (Of String)' tut beides. Keine Ahnung von dem Rest deines Problems - es ist ein Debugging-Problem. – Plutonix

+2

@Plutonix gut erstellt er 'Nothing': DI rate der Versuch catch Block wird von actaully einen Fehler zu sehen, nachdem er eine Zeichenfolge zu einem Null-Objekt hinzugefügt;) – Icepickle

+0

Ich glaube nicht, dass ccList.ToString tut, was Sie denken, dass es tut . Möglicherweise müssen Sie einen Join machen. Wenn Sie die E-Mails 1 und 2 hinzufügen, fehlt eine zwischen ihnen. Ich denke du hast ein paar kleine Gedanken, die hier falsch laufen. Ich würde vorschlagen, dass Sie eine kleine Sache nach der anderen machen und sicherstellen, dass sie gut funktioniert, bevor Sie etwas anderes machen. –

Antwort

1

Für alle Interessierten:

Hier ist die Lösung für beide Probleme, die ich mit war:

 Dim FSEmailAddress As String = "" 
    Dim link As String = "" 
    Dim ccJoin As String = "" 

    If FSEngineerName = "Email 1" Then 
     FSEmailAddress = "[email protected]" 
    ElseIf FSEngineerName = "Email 2" Then 
     FSEmailAddress = "[email protected]" 
    ElseIf FSEngineerName = "Email 3" Then 
     FSEmailAddress = "[email protected]" 
    ElseIf FSEngineerName = "Email 4" Then 
     FSEmailAddress = "[email protected]" 
    End If 

    If FSEmailAddress <> "" Then 
     Dim OutlookMessage As outlook.MailItem 
     Dim AppOutlook As New outlook.Application 
     Dim ccList As New List(Of String) 
     Try 

      OutlookMessage = AppOutlook.CreateItem(outlook.OlItemType.olMailItem) 
      Dim Recipents As outlook.Recipients = OutlookMessage.Recipients 

      Recipents.Add(FSEmailAddress) 

     If email1.Checked Then 
      ccList.Add("[email protected]") 
     End If 

     If email2.Checked Then 
      ccList.Add("[email protected]; ") 
     End If 

     If email3.Checked Then 
      ccList.Add("[email protected]; ") 
     End If 

     If email4.Checked Then 
      ccList.Add("[email protected]; ") 
     End If 

      ccJoin = String.Join("; ", ccList.ToArray()) 

      OutlookMessage.CC = ccJoin 

      OutlookMessage.Subject = responseVIN.Text & " was sent back to you by " & GetUserName() 
      OutlookMessage.Body = responseVIN.Text & " was returned To you" & vbCrLf & "Navigate To the following location To view the comments In the ReadMe file:" & vbCrLf & vbCrLf & archive_dir & responseVIN.Text & vbCrLf & vbCrLf & resAdvice.Text 
      OutlookMessage.BodyFormat = outlook.OlBodyFormat.olFormatHTML 
      OutlookMessage.Send() 
     Catch ex As Exception 
      MessageBox.Show("Mail could Not be sent") 
     Finally 
      OutlookMessage = Nothing 
      AppOutlook = Nothing 
     End Try 
    End If 
+0

Sie hätten wahrscheinlich die Antwort gefunden, wenn Sie nicht einen so großen Versuch Catch Block verwenden. Jetzt befindet sich die volle Logik im Block, während es ausreichen sollte, den Fehler beim Senden der E-Mail zu erfassen. Auch wenn Sie Ausnahmen erfassen möchten, sollten Sie immer analysieren, dass Sie sie richtig behandeln – Icepickle