Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Warum wird meint Eintrag nicht in die xml Datei geschrieben?

Empfohlene Antworten

Veröffentlicht

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+ObjectCollection</text>

</eintrag>

-<eintrag>

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

</eintrag>

-<eintrag>

<text>System.Windows.Forms.ListBox+ObjectCollection</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->Items->ToString());

					 // den Knoten abschließen

					 xmlSchreiben->WriteEndElement();

				 }					


				 xmlSchreiben->WriteEndDocument();


				 xmlSchreiben->Close();

			 }

};

}



Lieben Dank für Eure Hilfe


lempy


Mit Items.ToString() gibst du den Typ der Collection als String aus, was völlig korrekt eine "System.Windows.Forms.ListBox+ObjectCollection" ist.

Du musst über deine Iterationsvariable auf den aktuellen index zugreifen und dir dessen Text ausgeben lassen. Also listbox1.Items.PropertyDasDuAusgeben willst.

Gruß, Goulasz

P.S.: Das ganze dürfte sich auch ohne Schleife als LINQ-Ausdruck beschreiben lassen.

P.P.S.: Design und Logik in einem Dokument ist bäh.

Bearbeitet von Goulasz

  • Autor

Hey

Super!!! Klappt jetzt. Hatte so was ähnliches an der falschen Stelle gehabt, hat natürlich dann nicht funktioniert. Hab dabei aber nicht an die Items gedacht.

Recht lieben Dank

lempy

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.