none
Warum schreibt er nicht meine Einträge in die xml Datei? RRS feed

  • Frage

  • Hallo Leute

    Bin gerade dabei ein Programm zu schreiben, dass Einträge in einer TextBox in eine Listbox übergibt und anschließend den Inhalt der Listbox in eine XML Datei speichert. Das Schreiben in die TextBox und das Übernehmen in die Listbox mittels eines Buttons funktioniert. Der Inhalt in der Listbox soll dann über einen Button in einer XML Datei gespeichert (geschrieben) werden. Und genau da liegt der Hase im Pfeffer begraben. Er listet mir zwar die Anzahl der Einträge auf, aber er schreibt nicht meine Einträge in den "Text" Tag.

    So sieht meine XML Datei aus:

    <?xml version="1.0" encoding="UTF-8"?> -<eintraege>

    -<eintrag>

    <text>System.Windows.Forms.ListBox+SelectedObjectCollection</text>

    </eintrag>

    -<eintrag>

    <text>System.Windows.Forms.ListBox+SelectedObjectCollection</text>

    </eintrag>

    -<eintrag>

    <text>System.Windows.Forms.ListBox+SelectedObjectCollection</text>

    </eintrag>

    </eintraege

    Was ist da schief gelaufen? Keine Ahnung.

    Das ist mein Code:

    #pragma once
    
    
    namespace aufgabe3 {
    
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::Xml;
    
    	/// <summary>
    	/// Zusammenfassung für Form1
    	///
    	/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
    	///          die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
    	///          das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
    	///          Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
    	///          arbeiten, die diesem Formular zugewiesen sind.
    	/// </summary>
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    
    		// Eigene Attributte
    
    		// Für den Dateiname 
    		String ^xmlDateiname;		
    
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: Konstruktorcode hier hinzufügen.
    			//			
    
    			// setzen des Dateinamens
    			xmlDateiname = IO::Path::ChangeExtension(Application::ExecutablePath,".xml");
    			
    		}
    
    	protected:
    		/// <summary>
    		/// Verwendete Ressourcen bereinigen.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    	private: System::Windows::Forms::ListBox^  listBox1;
    	protected: 
    	private: System::Windows::Forms::TextBox^  textBox1;
    	private: System::Windows::Forms::Button^  buttonUebernehmen;
    
    	private: System::Windows::Forms::Button^  buttonSpeichern;
    
    
    	private:
    		/// <summary>
    		/// Erforderliche Designervariable.
    		/// </summary>
    		System::ComponentModel::Container ^components;
    
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Erforderliche Methode für die Designerunterstützung.
    		/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->listBox1 = (gcnew System::Windows::Forms::ListBox());
    			this->textBox1 = (gcnew System::Windows::Forms::TextBox());
    			this->buttonUebernehmen = (gcnew System::Windows::Forms::Button());
    			this->buttonSpeichern = (gcnew System::Windows::Forms::Button());
    			this->SuspendLayout();
    			// 
    			// listBox1
    			// 
    			this->listBox1->FormattingEnabled = true;
    			this->listBox1->Location = System::Drawing::Point(12, 12);
    			this->listBox1->Name = L"listBox1";
    			this->listBox1->Size = System::Drawing::Size(144, 225);
    			this->listBox1->Sorted = true;
    			this->listBox1->TabIndex = 0;
    			// 
    			// textBox1
    			// 
    			this->textBox1->Location = System::Drawing::Point(172, 12);
    			this->textBox1->Name = L"textBox1";
    			this->textBox1->Size = System::Drawing::Size(119, 20);
    			this->textBox1->TabIndex = 1;
    			// 
    			// buttonUebernehmen
    			// 
    			this->buttonUebernehmen->Location = System::Drawing::Point(172, 69);
    			this->buttonUebernehmen->Name = L"buttonUebernehmen";
    			this->buttonUebernehmen->Size = System::Drawing::Size(119, 23);
    			this->buttonUebernehmen->TabIndex = 2;
    			this->buttonUebernehmen->Text = L"Eintrag Übernehmen";
    			this->buttonUebernehmen->UseVisualStyleBackColor = true;
    			this->buttonUebernehmen->Click += gcnew System::EventHandler(this, &Form1::buttonUebernehmen_Click);
    			// 
    			// buttonSpeichern
    			// 
    			this->buttonSpeichern->Location = System::Drawing::Point(172, 107);
    			this->buttonSpeichern->Name = L"buttonSpeichern";
    			this->buttonSpeichern->Size = System::Drawing::Size(119, 23);
    			this->buttonSpeichern->TabIndex = 3;
    			this->buttonSpeichern->Text = L"Liste Speichern";
    			this->buttonSpeichern->UseVisualStyleBackColor = true;
    			this->buttonSpeichern->Click += gcnew System::EventHandler(this, &Form1::buttonSpeichern_Click);
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(297, 261);
    			this->Controls->Add(this->buttonSpeichern);
    			this->Controls->Add(this->buttonUebernehmen);
    			this->Controls->Add(this->textBox1);
    			this->Controls->Add(this->listBox1);
    			this->Name = L"Form1";
    			this->Text = L"Form1";
    			this->ResumeLayout(false);
    			this->PerformLayout();
    
    		}
    
    #pragma endregion
    	private: System::Void buttonUebernehmen_Click(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				 listBox1->Items->Add(Convert::ToString(textBox1->Text));
    			 }
    
    	private: System::Void buttonSpeichern_Click(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				// die Einstellungen setzen
    				 XmlWriterSettings ^einstellungen = gcnew XmlWriterSettings;
    
    				 einstellungen->Indent = true;
    
    				 xmlDateiname = "liste.xml";
    
    				 // Die Datei erzeugen
    				 XmlWriter ^xmlSchreiben = XmlWriter::Create(xmlDateiname, einstellungen);
    
    				 xmlSchreiben->WriteStartDocument();
    
    				 // Die Wurzel schreiben
    				 xmlSchreiben->WriteStartElement("eintraege");				
    				
    				 for (Int32 i = 0; i < listBox1->Items->Count; i++)
    				 {
    					 // den Knoten eintrag erzeugen
    					 xmlSchreiben->WriteStartElement("eintrag");
    					 // die Einträge schreiben
    					 xmlSchreiben->WriteElementString("text",listBox1->SelectedItems->ToString());
    					 // den Knoten abschließen
    					 xmlSchreiben->WriteEndElement();
    				 }					
    
    				 xmlSchreiben->WriteEndDocument();
    
    				 xmlSchreiben->Close();
    			 }
    };
    }
    
    

    Lieben Dank für Eure Hilfe

    lempy

    Freitag, 9. Mai 2014 10:33

Antworten

  • Hey Elmar

    Hat sich erledigt. Trotzdem lieben Dank.

    Das Programm gibt mir nur meine Einträge wieder, daher verstehe ich Deinen zweiten Hinweis nicht so ganz was Du mir damit sagen willst. Kannst Du mir das noch mal für "Dummies" erklären?

    Lieber Gruß

    lempy

    Samstag, 10. Mai 2014 09:03

Alle Antworten

  • Hallo Lempy,

    Zum ersten:  SelectedItems ist eine Auflistung, folglich musst Du den Index (der Schleife) angeben:

    listBox1->SelectedItems[i]->ToString()

    Zum zweiten: Für die Schleife verwendest Du Items.Count, wenn Du aber nur die selektierten ausgeben willst, sollte die Schleife nur bis SelectedItems.Count gehen.

    Gruß Elmar

    Freitag, 9. Mai 2014 16:42
  • Hey Elmar

    Hat sich erledigt. Trotzdem lieben Dank.

    Das Programm gibt mir nur meine Einträge wieder, daher verstehe ich Deinen zweiten Hinweis nicht so ganz was Du mir damit sagen willst. Kannst Du mir das noch mal für "Dummies" erklären?

    Lieber Gruß

    lempy

    Samstag, 10. Mai 2014 09:03
  • Hallo Lempy,

    Du verwendest in der Schleife die Anzahl der Elemente in der Listbox:

     for (Int32 i = 0; i < listBox1->Items->Count; i++)

    richtig wäre aber die Anzahl der selektierten Elemente,

     for (Int32 i = 0; i < listBox1->SelectedItems->Count; i++)

    denn das können weniger als alle sein - und dann "knallt" es.

    Gruß Elmar

    Samstag, 10. Mai 2014 13:20