foreach in C++?
-
Kann hier Mis2Com nur zustimmen.
-
Nun, ich habe jetzt herausgefunden, dass es eine einfache Möglichkeit gibt, ein komplettes Objekt mit sämtlichen Membern zu speichern.
Hier der Quelltext dafür http://www.developer.com/net/cplus/article.php/3350931.
So wie es dort demonstriert wird funktioniert es auch bei mir. Mein Ziel ist es aber, ein Steuerelement der Form also ein Objekt aus System::Windows::Forms zu serialisieren.
Also habe ich das angegebene Objekt einfach durch das TreeView-Steuerelement ersetzt:
formatter->Serialize(stream, progammer /*Beispielklasse*/);
formatter->Serialize(stream, treeView1);
Lies sich auch Kompilieren, aber zur Laufzeit kam folgende Fehlermeldung:
Eine nicht behandelte Ausnahme des Typs 'System.Runtime.Serialization.SerializationException' ist in Screen.exe aufgetreten.
Zusätzliche Informationen: Der Typ System.Windows.Forms.TreeView in Assembly System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ist nicht als serialisierbar markiert
-
Damit dies funktioniert, muss eine Klasse als Serialiseable markiert werden. Was bei TreeView nicht der Fall ist.
-
Kann man denn diese Markierung nachträglich selbst zu dieser Klasse hinzufügen. Wenn ja - was muss ich dann machen?
-
-
Danke, ich werde mir das gleich mal ansehen ...
-
Hallo,
ich habe nun eine Möglichkeit gefunden, den Inhalt eines TreeViews zu speichern.
Hier die Funktionen zum Öfnen und Speichern:
void SaveTreeViewToDevice(TreeView * tree) { Stream * stream = new FileStream(S"datei.dat", FileMode::Create, FileAccess::ReadWrite); BinaryFormatter* formatter = new BinaryFormatter(); ArrayList * al = new ArrayList(); for (int i = 0; i < tree->Nodes->get_Count(); i++) { al->Add(tree->Nodes->Item[i]); } formatter->Serialize(stream, al); stream->Close(); }
void OpenTreeViewFormDevice(TreeView * tree) { tree->Nodes->Clear(); Stream * stream = new FileStream(S"datei.dat", FileMode::Open, FileAccess::Read, FileShare::Read); BinaryFormatter * formatter = new BinaryFormatter(); ArrayList * tempAl = static_cast<ArrayList *>(formatter->Deserialize(stream)); for (int i = 0; i < tempAl->get_Count(); i++) { tree->Nodes->Add(static_cast<TreeNode *>(tempAl->get_Item(i))); } }
-
Talla schrieb:
Foreach ist kein Sprachmittel von C++! Du hast ja sogar selber geschrieben dass es in die Standardlibrary gehört, und Sprache an sich und Klassenbibliothek ist nen himmelweiter Unterschied.
Soweit ich richtig informiert bin, ist die STL inzwischen Bestandteil des C++ Standards.
-
inzwischen
lol, jo, seit ungefähr 6 Jahren
-
Und? Die BCL gehört auch zum .Net Framework aber nicht zur Sprache C# an sich. Nur weil die STL zum C++ Standard gehört, heißt es doch nicht automatisch das es zur Sprache an sich gehört.