<?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[Struct in ListBox einbinden]]></title><description><![CDATA[<p>Hallo.<br />
Ich habe ein Problem:</p>
<p>Bei mir in der ListBox stehen unterschiedliche Strings aus einer Tabelle. Diese Strings gehören jeweils zu unterschiedlichen ID's. Jetzt möchte ich die ID's der ausgewählten einträge herausfinden.<br />
Ich habe gehört, dass dies mit einem Struct möglich ist, welches man mit in die Lisbox einbindet. Ich weiß aber nicht, wie das gehen soll.<br />
In der Hilfe steht zwar:</p>
<pre><code>void __fastcall AddItem(AnsiString Item, TObject AObject);
</code></pre>
<p>Aber ich weiß nicht wie ich das anwenden soll und wie ich dann hinterher aus den ausgewählten Einträgen die ID herausfinden kann.</p>
<p>Bitte helft mir.</p>
<p>MfG<br />
Muecke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/105994/struct-in-listbox-einbinden</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 09:58:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/105994.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Apr 2005 08:06:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Struct in ListBox einbinden on Tue, 05 Apr 2005 08:06:32 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Ich habe ein Problem:</p>
<p>Bei mir in der ListBox stehen unterschiedliche Strings aus einer Tabelle. Diese Strings gehören jeweils zu unterschiedlichen ID's. Jetzt möchte ich die ID's der ausgewählten einträge herausfinden.<br />
Ich habe gehört, dass dies mit einem Struct möglich ist, welches man mit in die Lisbox einbindet. Ich weiß aber nicht, wie das gehen soll.<br />
In der Hilfe steht zwar:</p>
<pre><code>void __fastcall AddItem(AnsiString Item, TObject AObject);
</code></pre>
<p>Aber ich weiß nicht wie ich das anwenden soll und wie ich dann hinterher aus den ausgewählten Einträgen die ID herausfinden kann.</p>
<p>Bitte helft mir.</p>
<p>MfG<br />
Muecke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/760021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760021</guid><dc:creator><![CDATA[Muecke]]></dc:creator><pubDate>Tue, 05 Apr 2005 08:06:32 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in ListBox einbinden on Tue, 05 Apr 2005 08:20:25 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>die korrekte Methode ist</p>
<pre><code class="language-cpp">TListBox-&gt;Items-&gt;AddObject(const AnsiString S, System::TObject* AObject);
</code></pre>
<p>damit hat der Eintrag einen festen Verweis auf ein Objekt, das du durch das Array</p>
<pre><code class="language-cpp">TListBox-&gt;Items-&gt;Objects[&lt;Index&gt;];
</code></pre>
<p>wieder ermitteln kannst, wobei Index immer dem Index des Strings entspricht.<br />
Zu beachten ist, das Items nicht für das Löschen der verbundenen Objekte zuständig ist.</p>
<p>Du hast allerdings das Problem, das du structs verwendest, die du nicht an AddObject übergeben kannst. Dazu brauchst du von TObject abgeleitete Instanzen.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/760037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760037</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 05 Apr 2005 08:20:25 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in ListBox einbinden on Tue, 05 Apr 2005 08:21:26 GMT]]></title><description><![CDATA[<p>Ich muss nicht unbedingt ein Struct verwenden.</p>
<p>Was würdest du mir denn da vorschlagen...?<br />
Noch habe ich das nicht in ein Struct geschrieben...</p>
<p>MfG<br />
Muecke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/760041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760041</guid><dc:creator><![CDATA[Muecke]]></dc:creator><pubDate>Tue, 05 Apr 2005 08:21:26 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in ListBox einbinden on Tue, 05 Apr 2005 08:32:40 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Das kommt natürlich darauf an, was du mit dem Objekt machen willst. Da du etwas von ID gesagt hast, erstelle ich mal ein Beispiel.</p>
<p>Zuerst brauchst du eine von TObject abgeleitete Klasse (Achtung Minimallösung):</p>
<pre><code class="language-cpp">class TID : public TObject
{
  public :
    AnsiString Caption;
    int ID;
    TID() : TObject() {};
  };
</code></pre>
<p>Aus dieser Klasse erstellst du nun deine Liste von relevanten Instanzen, die jeweils passende Werte enthalten. Diese packst du z.B. in ein Array. Jetzt kannst du die ListBox füllen :</p>
<pre><code class="language-cpp">for (int Lv = 0; Lv &lt; ArrayCount; Lv++)
  ListBox-&gt;Items-&gt;Add(Array[Lv]-&gt;Caption; Array[Lv]);
</code></pre>
<p>Jetzt kann die ListBox z.B. sortiert werden, ohne das du denn Bezug zur ID verlierst. Brauchst du jetzt die ID eines ListBox-Eintrags, machst du</p>
<pre><code class="language-cpp">TID *CurrID = static_cast&lt;TID *&gt; (ListBox-&gt;Items-&gt;Objects[ListBox-&gt;ItemIndex]);
</code></pre>
<p>was in diesem Fall das Objekt des ausgewählten Eintrags bestimmt</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/760045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760045</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 05 Apr 2005 08:32:40 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in ListBox einbinden on Tue, 05 Apr 2005 08:44:43 GMT]]></title><description><![CDATA[<p>Danke für die guten Beschreibungen. Zwei Probleme habe ich aber noch:</p>
<ol>
<li>Wie erstelle ich das Array basierend auf der Klasse?</li>
<li>In meiner ListBox können mehrere Einträge ausgewählt sein. Wie kriege ich die ID von allen ausgewählten???</li>
</ol>
<p>MfG<br />
Muecke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/760055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760055</guid><dc:creator><![CDATA[Muecke]]></dc:creator><pubDate>Tue, 05 Apr 2005 08:44:43 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in ListBox einbinden on Tue, 05 Apr 2005 08:59:52 GMT]]></title><description><![CDATA[<p>Hallo</p>
<blockquote>
<p>Wie erstelle ich das Array basierend auf der Klasse?</p>
</blockquote>
<p>Da gibt es mehrere Möglichkeiten. Am besten in deinem Fall ist TObjectList, mit der Eigenschaft <em>OwnsObjects</em> auf true.<br />
Das Array sollte natürlich als Membervariable des entsprechenden Forms deklariert werden, und im Konstruktor des Forms erstellt und im Destruktor gelöscht werden.</p>
<blockquote>
<p>In meiner ListBox können mehrere Einträge ausgewählt sein. Wie kriege ich die ID von allen ausgewählten???</p>
</blockquote>
<p>Dazu gehst du mit dem Array ListBox-&gt;Selected alle Einträga durch und extrahierst bei true das ID-Objekt.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/760066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760066</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 05 Apr 2005 08:59:52 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in ListBox einbinden on Tue, 05 Apr 2005 09:20:12 GMT]]></title><description><![CDATA[<p>Ich habe das jetzt so deklariert. Ein globales Array;</p>
<pre><code>TID Test[10];
</code></pre>
<p>Das füllen der ListBox und des Arrays mache ich so:</p>
<pre><code>while(!DatenmodulDB-&gt;IBQuery-&gt;Eof &amp;&amp; i&lt;10)
                {
                        Test[i].kriterium = DatenmodulDB-&gt;IBQuery-&gt;Fields-&gt;Fields[1]-&gt;AsString;
                        Test[i].id = DatenmodulDB-&gt;IBQuery-&gt;Fields-&gt;Fields[0]-&gt;AsInteger;
                        LB_kriterien-&gt;Items-&gt;AddObject(Test[i].kriterium, &amp;Test[i]);
                        DatenmodulDB-&gt;IBQuery-&gt;Next();
                        i++;
                }
</code></pre>
<p>Mir gefällt jetzt aber nicht, dass ich das Array statisch habe. Wäre gut wenn das eine dynamische größe hätte. Außerdem bekomme ich eine Fehlermeldung beim beenden des Programms:</p>
<p>Zugriffsverletzung bei Adresse ...</p>
<p>Wie kann ich das noch verbessern?</p>
<p>MfG<br />
Muecke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/760071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760071</guid><dc:creator><![CDATA[Muecke]]></dc:creator><pubDate>Tue, 05 Apr 2005 09:20:12 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in ListBox einbinden on Tue, 05 Apr 2005 09:34:35 GMT]]></title><description><![CDATA[<p>Ihr würdet mir vielleicht auch schon helfen, wenn ihr mir sagt,<br />
wie ich bestimmen kann, an welcher Position meine markierten Einträge stehen.<br />
Das ich einfach den Index bekomme wo der Eintrag an der Position steht.</p>
<p>MfG<br />
Muecke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/760093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760093</guid><dc:creator><![CDATA[Muecke]]></dc:creator><pubDate>Tue, 05 Apr 2005 09:34:35 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in ListBox einbinden on Tue, 05 Apr 2005 09:36:52 GMT]]></title><description><![CDATA[<p>Hallo</p>
<blockquote>
<p>Mir gefällt jetzt aber nicht, dass ich das Array statisch habe. Wäre gut wenn das eine dynamische größe hätte. Außerdem bekomme ich eine Fehlermeldung beim beenden des Programms:</p>
</blockquote>
<p>Genau deshalb habe ich TObjectList geschrieben.<br />
Ich zeig dir mal, wie ich das mir vorstelle :<br />
Im Header des betreffenden Forms machst du diese Änderungen :</p>
<pre><code class="language-cpp">// alle anderen Includes
#include &lt;memory&gt;
#include &lt;contnrs.hpp&gt;
...
// hier Klassendefinition von TID
...
class TForm1 : public TForm
{
  ...
private:	// Anwender-Deklarationen
  ...
  // auto_ptr ist eine Erweiterung des normalen Raw Pointers, der die Lebenszeit   
  // der angegeben Instanz beschränkt (in diesem Fall des Forms), so das du dich    
  // nicht selber um das Löschen kümmern must
  std::auto_ptr&lt;TObjectList&gt; IDList;
public:		// Anwender-Deklarationen
  }
</code></pre>
<p>In der Implementation des Forms schreibst du noch dazu<br />
[cpp]// Konstruktor des Forms, um die ObjektList ergänzt<br />
__fastcall TForm1::TForm1(TComponent* Owner)<br />
: TForm(Owner)<strong>, IDList(new TObjectList)</strong></p>
<p>...<br />
// Ein ID-Objekt soll erstellt werden und an die Liste angefügt werden<br />
TID *NewID = new TID();<br />
NewID-&gt;id = 1;<br />
NewID-&gt;kriterium = &quot;Record 1&quot;;<br />
IDList-&gt;Add(NewID);<br />
...<br />
// Die Einträge der IDList sollen in der ListBox angezeigt werden.<br />
// In diesem Fall einfach alle, allerdings ist es ohne Probleme möglich,<br />
// in der Schleife noch eine Auswahl zu machen<br />
for (int Lv = 0; Lv &lt; IDList-&gt;Count; Lv++)<br />
{<br />
TID *CurrID = static_cast&lt;TID *&gt; (IDList-&gt;Items[Lv]);<br />
LB_kriterien-&gt;Items-&gt;AddObject(CurrID-&gt;kriterium, CurrID);<br />
}</p>
<p>// Das Bestimmen des ausgewählten ID-Objects steht bereits oben<br />
[/cpp]<br />
Das mag vielleicht kompliziert und unnötig aussehen, ist aber sehr praktisch, wenn man die Möglichkeiten von OOP und VCL wirklich ausnutzt.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/760094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760094</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 05 Apr 2005 09:36:52 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in ListBox einbinden on Tue, 05 Apr 2005 09:51:23 GMT]]></title><description><![CDATA[<p>Ok.<br />
Ichj werde es mal versuchen.<br />
Ich weiß aber nicht ob ich das hinkriege. Habe auch schon einen anderen Lösungsweg gefunden.</p>
<p>MfG<br />
Muecke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/760106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760106</guid><dc:creator><![CDATA[Muecke]]></dc:creator><pubDate>Tue, 05 Apr 2005 09:51:23 GMT</pubDate></item></channel></rss>