none
Umschreiben VB RRS feed

  • Frage

  • Kann mir bitte jemand folgenden Code(Konsolenanwendung) in den Code für Windowsanwendungen umschreiben? Ich verstehe nix... :
    Imports System.IO
    Imports System.Collections
    Imports System.Runtime.Serialization.Formatters.Binary
    Imports System.Runtime.Serialization
    
    
    Module App
    
        Sub Main()
            Serialize()
            Deserialize()
        End Sub
    
        Sub Serialize()
    
            ' Create a hashtable of values that will eventually be serialized.
            Dim addresses As New Hashtable
            addresses.Add("Jeff", "123 Main Street, Redmond, WA 98052")
            addresses.Add("Fred", "987 Pine Road, Phila., PA 19116")
            addresses.Add("Mary", "PO Box 112233, Palo Alto, CA 94301")
    
            ' To serialize the hashtable (and its key/value pairs),  
            ' you must first open a stream for writing. 
            ' In this case, use a file stream.
            Dim fs As New FileStream("DataFile.dat", FileMode.Create)
    
            ' Construct a BinaryFormatter and use it to serialize the data to the stream.
            Dim formatter As New BinaryFormatter
            Try
                formatter.Serialize(fs, addresses)
            Catch e As SerializationException
                Console.WriteLine("Failed to serialize. Reason: " & e.Message)
                Throw
            Finally
                fs.Close()
            End Try
        End Sub
    
    
    
        Sub Deserialize()
            ' Declare the hashtable reference.
            Dim addresses As Hashtable = Nothing
    
            ' Open the file containing the data that you want to deserialize.
            Dim fs As New FileStream("DataFile.dat", FileMode.Open)
            Try
                Dim formatter As New BinaryFormatter
    
                ' Deserialize the hashtable from the file and 
                ' assign the reference to the local variable.
                addresses = DirectCast(formatter.Deserialize(fs), Hashtable)
            Catch e As SerializationException
                Console.WriteLine("Failed to deserialize. Reason: " & e.Message)
                Throw
            Finally
                fs.Close()
            End Try
    
            ' To prove that the table deserialized correctly, 
            ' display the key/value pairs.
            Dim de As DictionaryEntry
            For Each de In addresses
                Console.WriteLine("{0} lives at {1}.", de.Key, de.Value)
            Next
        End Sub
    End Module
    
    Vielen dank
    LG Yves Riedener
    Sonntag, 20. Dezember 2009 15:55

Antworten

  • Hallo Yves,

    Du siehst vermutlich nichts, weil Dein Code niemals zur Ausführung kommt. Das Serialisieren und Deserialisieren findet in der Methode Main() statt, die bei einer Konsolen Anwendung den Einstiegspunkt des Programms darstellt. Bei einer Windows Forms Anwendung ist es standardmäßig anders, wenn das Anwendungsframework aktiviert ist. Damit Du irgendwas "siehst", kannst Du statt der Main Methode das Form Load Ereignis verwenden:

      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Serialize()
        Deserialize()
      End Sub


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Sonntag, 20. Dezember 2009 17:35
    Moderator

Alle Antworten

  • Hallo Yves,

    was genau verstehst Du nicht? Console.WriteLine gibt etwas im Konsolenfenster oder in der IDE beim Debugging im Ausgabefenster. Das ist eigentlich auch schon der größte Unterschied zwischen einer Konsolen Anwendung und einer Windows Forms Anwendung. Wenn Du dies in einer Windows Forms Anwedung machen möchtest, musst Du diese Anweisungen halt durch etwas entsprechendes ersetzen, sei es eine TextBox eine ListBox oder was auch immer.

    Wenn Du den Code im ganzen jedoch nicht verstehst, solltest Du Dich zunächst damit auseinandersetzen, ihn verstehen und kannst ihn dann auch auf Deine Anwendung adaptieren. Dir hier irgendwas vorkauen, ohne zu wissen, was Du eigentlich erreichen möchtest, halte ich für wenig zielführend.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Sonntag, 20. Dezember 2009 16:38
    Moderator
  • Ok, Mein Code, welchen ich umgeschrieben habe, sieht folgendermassen aus:
    Imports System.IO
    Imports System.Collections
    Imports System.Runtime.Serialization.Formatters.Binary
    Imports System.Runtime.Serialization
    Class Form1
    
        Sub Main()
            Serialize()
            Deserialize()
        End Sub
    
        Sub Serialize()
    
            'Erstellen einer Hash-Tabelle von Werten, die schließlich serialisiert werden.
            Dim addresses As New Hashtable
            addresses.Add("Jeff", "123 Main Street, Redmond, WA 98052")
            addresses.Add("Fred", "987 Pine Road, Phila., PA 19116")
            addresses.Add("Mary", "PO Box 112233, Palo Alto, CA 94301")
    
            ' To serialize the hashtable (and its key/value pairs),  
            ' you must first open a stream for writing. 
            ' In this case, use a file stream.
            Dim fs As New FileStream("DataFile.dat", FileMode.Create)
    
            ' Construct a BinaryFormatter and use it to serialize the data to the stream.
            Dim formatter As New BinaryFormatter
            Try
                formatter.Serialize(fs, addresses)
            Catch e As SerializationException
                MsgBox("Failed to serialize. Reason: " & e.Message)
                Throw
            Finally
                fs.Close()
            End Try
        End Sub
    
    
    
        Sub Deserialize()
            ' Declare the hashtable reference.
            Dim addresses As Hashtable = Nothing
    
            ' Open the file containing the data that you want to deserialize.
            Dim fs As New FileStream("DataFile.dat", FileMode.Open)
            Try
                Dim formatter As New BinaryFormatter
    
                ' Deserialize the hashtable from the file and 
                ' assign the reference to the local variable.
                addresses = DirectCast(formatter.Deserialize(fs), Hashtable)
            Catch e As SerializationException
                MsgBox("Failed to deserialize. Reason: " & e.Message)
                Throw
            Finally
                fs.Close()
            End Try
    
            ' To prove that the table deserialized correctly, 
            ' display the key/value pairs.
            Dim de As DictionaryEntry
            For Each de In addresses
                MsgBox("{0} lives at {1}.", de.Key, de.Value)
            Next
        End Sub
    End Class
    Fehlermeldungen gibt es keine, aber wenn ich das Programm teste, sehe ich nichts, wieso? Ich verstehe das ganze nicht, ich weiss dass mir irgendwelche Grundlagen fehlen, aber das sind sicherlich nicht die, welche im VB2008 Galileo Openbook  beschrieben worden sind, denn dieses habe ich gelesen. Kann nicht jemand der das ganze verstehet, mir helfen den Code zu erstellen? Ich habe 4 PictureBox und 4 RichTextBox in einem MDI Child, ich möchte sie Speichern, Öffnen und Drucken können. Beim Drucken soll man die Bilder und den Text sehen. Beim speichern soll das ganze MDI Child gespeichert werden, und wieder geöffnet werden können. Der Code sollte sich, wenn Möglich, nicht auf die 4 Bilder und die 4 Text bezihen, sondern auf das Formular.
    Könnt ihr mir bitte helfen, ich brauche das ganze bis im Januar! Wenn ihr wollt, kann ich auf das Programm auch schreiben, dass der Speichern, Öffnen und Drucken Code von euch stammt.
    LG Yves Riedener
    Sonntag, 20. Dezember 2009 17:07
  • Hallo Yves,

    Du siehst vermutlich nichts, weil Dein Code niemals zur Ausführung kommt. Das Serialisieren und Deserialisieren findet in der Methode Main() statt, die bei einer Konsolen Anwendung den Einstiegspunkt des Programms darstellt. Bei einer Windows Forms Anwendung ist es standardmäßig anders, wenn das Anwendungsframework aktiviert ist. Damit Du irgendwas "siehst", kannst Du statt der Main Methode das Form Load Ereignis verwenden:

      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Serialize()
        Deserialize()
      End Sub


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Sonntag, 20. Dezember 2009 17:35
    Moderator