Benutzer mit den meisten Antworten
Umschreiben VB

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
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- Als Antwort vorgeschlagen Thorsten DörflerModerator Dienstag, 22. Dezember 2009 10:44
- Nicht als Antwort vorgeschlagen Yves Riedener Sonntag, 27. Dezember 2009 21:28
- Als Antwort markiert Yves Riedener Sonntag, 27. Dezember 2009 21:29
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 -
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 -
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- Als Antwort vorgeschlagen Thorsten DörflerModerator Dienstag, 22. Dezember 2009 10:44
- Nicht als Antwort vorgeschlagen Yves Riedener Sonntag, 27. Dezember 2009 21:28
- Als Antwort markiert Yves Riedener Sonntag, 27. Dezember 2009 21:29