<?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[delete mit OnKeyDown des Formulars]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab mal wieder ein Problem:</p>
<p>Ich erstelle zur Laufzeit Objekte wie z.B. Edits, Buttons und Charts.<br />
Diese werden in einem Array angelegt.</p>
<pre><code>*.h
TEdit* Edit[20];
TChart* Chart[20]; //usw
</code></pre>
<p>Bei diesen Elementen sind die Methoden OnMouseDown und OnDragOver implementiert.<br />
Nun muss ich aber die Elemente zur Laufzeit wieder einzeln löschen können, und das mache ich so:</p>
<pre><code>*.cpp
void TMaske::DeleteElement(TObject* ...)
{    //switch/case(Edit, Chart usw.)

    delete Edit[ElIndex];
    for(int j=ElIndex;  j&lt;AktAnz-1; j++)
        Edit[j]=Edit[j+1];
    AktAnz--;
}
</code></pre>
<p>Das funktioniert auch scheinbar einwandfrei und fehlerfrei entweder von einem 2. Formular aufgerufen oder aufgerufen von einem Button auf dem Formular TMaske selbst.</p>
<p>Problem:<br />
Wenn ich KeyPreview des Formulars auf true setze und diese Funktion mit OnKeyDown (FormKeyDown) des Formulars z.B. mit STRG+ENTF aufrufe, dann gibts meist einen EAbstractError und sonst eine EAccesViolation. Der Debugger läuft dann durch bis an das Ende der FormKeyDown Implementierung und dann kommt der Fehler.<br />
So auch bei Buttons.</p>
<p>Das Eigenartige: 1. Bei Charts gibts bei der gleichen Prozedur diesen Fehler nicht.<br />
2. Wenn ich das erste Editfeld lösche geht das.<br />
3. Und wenn ich per Button lösche geht das auch, egal in welcher Reihenfolge. 4. Wenn ich delete auskommentiere, geht der Ablauf auch, nur wird dann nicht gelöscht.</p>
<p>Scheinbar wird nach der FormKeyDown (-&gt;KeyPrview=true!!) noch auf das Element zugegriffen/ Ereignis ausgelöst. Aber wenn ich vor delete Enabled auf false setze, macht das auch keinen Unterschied.<br />
Wäre über alle Tips und Lösungsalternativen dankbar, wie ich mit der Tastatur löschen kann. Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/148291/delete-mit-onkeydown-des-formulars</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 15:57:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/148291.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 25 May 2006 10:13:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to delete mit OnKeyDown des Formulars on Thu, 25 May 2006 10:15:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab mal wieder ein Problem:</p>
<p>Ich erstelle zur Laufzeit Objekte wie z.B. Edits, Buttons und Charts.<br />
Diese werden in einem Array angelegt.</p>
<pre><code>*.h
TEdit* Edit[20];
TChart* Chart[20]; //usw
</code></pre>
<p>Bei diesen Elementen sind die Methoden OnMouseDown und OnDragOver implementiert.<br />
Nun muss ich aber die Elemente zur Laufzeit wieder einzeln löschen können, und das mache ich so:</p>
<pre><code>*.cpp
void TMaske::DeleteElement(TObject* ...)
{    //switch/case(Edit, Chart usw.)

    delete Edit[ElIndex];
    for(int j=ElIndex;  j&lt;AktAnz-1; j++)
        Edit[j]=Edit[j+1];
    AktAnz--;
}
</code></pre>
<p>Das funktioniert auch scheinbar einwandfrei und fehlerfrei entweder von einem 2. Formular aufgerufen oder aufgerufen von einem Button auf dem Formular TMaske selbst.</p>
<p>Problem:<br />
Wenn ich KeyPreview des Formulars auf true setze und diese Funktion mit OnKeyDown (FormKeyDown) des Formulars z.B. mit STRG+ENTF aufrufe, dann gibts meist einen EAbstractError und sonst eine EAccesViolation. Der Debugger läuft dann durch bis an das Ende der FormKeyDown Implementierung und dann kommt der Fehler.<br />
So auch bei Buttons.</p>
<p>Das Eigenartige: 1. Bei Charts gibts bei der gleichen Prozedur diesen Fehler nicht.<br />
2. Wenn ich das erste Editfeld lösche geht das.<br />
3. Und wenn ich per Button lösche geht das auch, egal in welcher Reihenfolge. 4. Wenn ich delete auskommentiere, geht der Ablauf auch, nur wird dann nicht gelöscht.</p>
<p>Scheinbar wird nach der FormKeyDown (-&gt;KeyPrview=true!!) noch auf das Element zugegriffen/ Ereignis ausgelöst. Aber wenn ich vor delete Enabled auf false setze, macht das auch keinen Unterschied.<br />
Wäre über alle Tips und Lösungsalternativen dankbar, wie ich mit der Tastatur löschen kann. Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1064767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1064767</guid><dc:creator><![CDATA[Michael1985]]></dc:creator><pubDate>Thu, 25 May 2006 10:15:34 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit OnKeyDown des Formulars on Thu, 25 May 2006 10:24:50 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>ich kann zwar die Struktur nicht wirklich verstehen aus so allgemeinen Veschreibung, vermutlich wird der Key-Event noch an das nicht mehr existierende Control weitergeben. Das könntest du verhindern, indem du bei verlassen des Form::OnKeyDown einfach</p>
<pre><code class="language-cpp">Key = '\0';
</code></pre>
<p>setzt. Dann wird der Event nicht weiter verfolgt.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1064778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1064778</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 25 May 2006 10:24:50 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit OnKeyDown des Formulars on Thu, 25 May 2006 11:38:46 GMT]]></title><description><![CDATA[<p>Herzlichen Dank, das wars!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1064828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1064828</guid><dc:creator><![CDATA[Michael1985]]></dc:creator><pubDate>Thu, 25 May 2006 11:38:46 GMT</pubDate></item></channel></rss>