usa un case selct che intercetta il tipo oggetto passato tramie ParamArray...una cosa così...

codice:
Sub SaveProject(PercorsoFile as string, ParamArray Oggetti As Object())
    Using LF As New IO.Streamwrite(PercorsoFile)
        For Each Oggetto as Object in Oggetti

            Select Case Oggetto.Gettype.name

                Case "TextBox"
                    LF.Writeline(Oggetto.Text)

                Case "ListBox"
                    for each Riga as item in Oggetto.Items
                        LF.Writeline(Riga.Value)
                    Next Riga

                case ......

            End Select

        Next Oggetto
    End Using
End Sub
per chiamare questa sub devi specificare per primo parametro PercorsoFile e poi un array di oggetti da salvare...

Per la lettura del file dovresti prima anche salvare il nome e tipo oggetto, saranno utili alla lettura del file e caricamento sul relativo oggetto...

ps. Il code l'ho scritto al volo giusto per dare un'idea, ci potrebbero (anzi sicuramente ) essere degli errori di sintassi...