<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ListBox Werte speichern... nur wie?]]></title><description><![CDATA[<p>Hallo Jungs, ich habe in Errinerung, das man in einer ListBox auch Werte im Hintergrund speichern kann. Also mit Add wird ein sichtbarer Wert eingegeben und an dieser Stelle kann eine &quot;unsichtbarer&quot; Wert eingegeben werden, der dann mittels der Index Nummer ausgegeben werden kann. Bin schon die Ganze Zeit auf der Suche, weiß aber leider nicht wie das geht? Wäre nett wenn mir das hier einer kurz zeigen könnte, bzw mir die Methode sagen könnte, mit der das gemacht wird.</p>
<p>Gruß<br />
Thorsten</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/119303/listbox-werte-speichern-nur-wie</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Jul 2026 06:54:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/119303.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Aug 2005 16:08:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ListBox Werte speichern... nur wie? on Tue, 30 Aug 2005 16:08:23 GMT]]></title><description><![CDATA[<p>Hallo Jungs, ich habe in Errinerung, das man in einer ListBox auch Werte im Hintergrund speichern kann. Also mit Add wird ein sichtbarer Wert eingegeben und an dieser Stelle kann eine &quot;unsichtbarer&quot; Wert eingegeben werden, der dann mittels der Index Nummer ausgegeben werden kann. Bin schon die Ganze Zeit auf der Suche, weiß aber leider nicht wie das geht? Wäre nett wenn mir das hier einer kurz zeigen könnte, bzw mir die Methode sagen könnte, mit der das gemacht wird.</p>
<p>Gruß<br />
Thorsten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/861556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/861556</guid><dc:creator><![CDATA[ThorstenSteinberg]]></dc:creator><pubDate>Tue, 30 Aug 2005 16:08:23 GMT</pubDate></item><item><title><![CDATA[Reply to ListBox Werte speichern... nur wie? on Tue, 30 Aug 2005 16:18:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>siehe Hilfe zu<br />
TListBox::Items::AddObject<br />
TLIstBox::Objects</p>
<p>Diese Objekte sind aber vom Typ TObject. Du mußt also entweder von TObject ableiten oder casten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/861558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/861558</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 30 Aug 2005 16:18:34 GMT</pubDate></item><item><title><![CDATA[Reply to ListBox Werte speichern... nur wie? on Tue, 30 Aug 2005 16:20:31 GMT]]></title><description><![CDATA[<p>ahh, was ist caste? will die werte nur als AnsiString dann speichern ist da dann sowas wie GetObject[0] etc, kann grade nicht nachschauen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/861562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/861562</guid><dc:creator><![CDATA[ThorstenSteinberg]]></dc:creator><pubDate>Tue, 30 Aug 2005 16:20:31 GMT</pubDate></item><item><title><![CDATA[Reply to ListBox Werte speichern... nur wie? on Tue, 30 Aug 2005 16:35:31 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>casten : Speicherbereiche mit einem anderem Typ ansprechen als vorgegeben<br />
Du kannst in TStrings die Methode AddObject verwenden, um zu einem Listeintrag noch ein Referenzobjekt (von TObject abgeleitet) zu hinterlegen, das du selber erstellst hast und verwaltest.<br />
Über das Array Objects kannst du jederzeit wieder das Objekt an einer beliebiger Stelle auslesen.<br />
Aber du meistens brauchst einen cast auf den ursprüngichen Typ, um mit diesem vernünftig zu arbeiten. das kann man mit static_cast machen.</p>
<p>Das ganze funktioniert mit blinden, C-Style Casts auch mit AnsiStrings.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/861574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/861574</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 30 Aug 2005 16:35:31 GMT</pubDate></item><item><title><![CDATA[Reply to ListBox Werte speichern... nur wie? on Tue, 30 Aug 2005 16:48:45 GMT]]></title><description><![CDATA[<p>Wie schon angedeutet ist die Eigenschaft Objects ein Array auf Pointer auf TObject. AnsiStrings kann man da so ohne weiteres nicht hineinpacken. Evtl Pointer auf AnsiString die du dann nach TObject casten mußt.</p>
<pre><code class="language-cpp">AnsiString text;
list-&gt;Items-&gt;AddObject(reinterpret_cast&lt;TObject*&gt;(&amp;text));
</code></pre>
<p>So etwas ist aber sehr tückisch. Du mußt gut auf die Gültigkeitsbereiche der Variablen (bzw. der Pointer) achten. Wenn du deinen String wieder raushaben willst mußt du wieder zurückcasten wobei du hier keine Kontrolle hast ob das gut geht da ein reinterpret_cast keine Gültigkeitsprüfungen vornimmt.</p>
<p>Eine andere Variante wäre hier eine neue Klasse von TObject abzuleiten welcher der du dann nur neue Membervariablen hinzufügen mußt.</p>
<pre><code class="language-cpp">class MyClass : public TObject
{
public:
   AnsiString text;
};

MyClass *obj = new MyClass;
obj-&gt;text = &quot;Hallo&quot;;
list-&gt;Items-&gt;AddObject(obj);
</code></pre>
<p>Mit new erzeugte Objekte mußt du natürlich auch selbst wieder löschen. Die ListBox macht das nicht für dich. Beim Auslesen mußt du dann zurückcasten.</p>
<pre><code class="language-cpp">AnsiString TestText;
MyClass *test = dynamic_cast&lt;MyClass*&gt;(list-&gt;Items-&gt;Objects[0]);
if( test != 0) //war der Cast erfolgreich?
  TestText = test-&gt;text;
</code></pre>
<p>Hier nimmt man dynamic_cast weil dieser eine Überprüfung der Gültigkeit zulässt.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/7971">@akari</a><br />
Pointer auf AnsiString kannst du nicht mit static_cast nach TObject* casten da AnsiString nicht von TObject abgeleitet ist. Hier ist der reinterpret_cast oder ein C-Style Cast erforderlich. [edit]Oder habe ich dich da falsch verstanden?[edit]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/861577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/861577</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 30 Aug 2005 16:48:45 GMT</pubDate></item><item><title><![CDATA[Reply to ListBox Werte speichern... nur wie? on Tue, 30 Aug 2005 17:29:50 GMT]]></title><description><![CDATA[<p>hat bisher leider noch nicht funktioniert, bekomme da ein paar fehlermeldungen wie &quot;Konvertierung von MyClass nach AnsiString nicht möglich&quot; und so.</p>
<p>Gibt es da nicht noch ne andere Lösung? [edit] also auch ohne klasse?[/edit]<br />
vlt. noch ein TList -objekt erzeugen und darin auch die Pfade speichern?</p>
<p>ich habe irgendwie wage in errinerung das ich das mal einfacher hinbekommen habe, nur weiß ich leider nicht mehr wie, habe auch kein projekt mehr alles wech ...</p>
<p>trotzdem vielen dank schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/861596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/861596</guid><dc:creator><![CDATA[ThorstenSteinberg]]></dc:creator><pubDate>Tue, 30 Aug 2005 17:29:50 GMT</pubDate></item><item><title><![CDATA[Reply to ListBox Werte speichern... nur wie? on Tue, 30 Aug 2005 18:06:04 GMT]]></title><description><![CDATA[<p>Aktuelle Fehlermeldungen</p>
<p>[C++ Fehler] db_u1.cpp(54): E2034 Konvertierung von 'MyClass *' nach 'AnsiString' nicht möglich</p>
<p>[C++ Fehler] db_u1.cpp(54): E2342 Keine Übereinstimmung des Typs beim Parameter 'S' ('const AnsiString' erwartet, 'MyClass *' erhalten)</p>
<p>[C++ Fehler] db_u1.cpp(54): E2193 Zu wenige Parameter im Aufruf von '_fastcall TStrings::AddObject(const AnsiString,TObject *)'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/861605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/861605</guid><dc:creator><![CDATA[ThorstenSteinberg]]></dc:creator><pubDate>Tue, 30 Aug 2005 18:06:04 GMT</pubDate></item><item><title><![CDATA[Reply to ListBox Werte speichern... nur wie? on Wed, 31 Aug 2005 07:41:10 GMT]]></title><description><![CDATA[<p>Da hatte ich wohl eine falsche Parameterlist für AddObject verwendet. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Es muß natürlich so sein</p>
<pre><code class="language-cpp">list-&gt;Items-&gt;AddObject(&quot;ListBoxEintrag&quot;,obj);
</code></pre>
<p>Der erste Parameter in AddObject stellt deinen ListBoxEintrag dar und der zweite dein einzufügendes Objekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/861817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/861817</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 31 Aug 2005 07:41:10 GMT</pubDate></item><item><title><![CDATA[Reply to ListBox Werte speichern... nur wie? on Wed, 31 Aug 2005 16:57:28 GMT]]></title><description><![CDATA[<p>Ja super geil, das funktioniert auch nun!!</p>
<p>Nur wie meintest du das:</p>
<blockquote>
<p>Mit new erzeugte Objekte mußt du natürlich auch selbst wieder löschen. Die ListBox macht das nicht für dich.</p>
</blockquote>
<p>Mit &quot; delete MyClass &quot; kann ich das ja nicht löschen. Weiß grad nicht wie das gemeint ist.</p>
<p>Trotzdem schon mal vielen vielen dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/862230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/862230</guid><dc:creator><![CDATA[ThorstenSteinberg]]></dc:creator><pubDate>Wed, 31 Aug 2005 16:57:28 GMT</pubDate></item><item><title><![CDATA[Reply to ListBox Werte speichern... nur wie? on Wed, 31 Aug 2005 17:04:59 GMT]]></title><description><![CDATA[<p>Das bedeutet, wenn du die Instanzen von MyClass mit new erstellt und dann in deine ListBox gepackt hast, werden sie nicht gelöscht wenn die ListBox-Instanz gelöscht wird (also im Destruktor des Owners). Das bedeutet, das du die Objekte vorher selbst löschen mußt. Das kannst du z.Bsp. im Destruktor deiner Form machen (wenn diese Form Owner von der Listbox ist).<br />
So etwa</p>
<pre><code class="language-cpp">__fastcall TMyForm::~TMyForm()
{
   for( int i=0; i&lt; list-&gt;Items-&gt;Count; ++i)
      delete list-&gt;Objects[i];    
}
//---------------------------------------------------------------------------
</code></pre>
<p>Das ist jetzt nur ein Beispiel und nicht eins zu eins zu übertragen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/862235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/862235</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 31 Aug 2005 17:04:59 GMT</pubDate></item></channel></rss>