<?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[Windows Forms Ereignisse]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich habe gerade neu angefangen mit der Windows Forms programmierung und bin auf etwas gestossen das mir nicht in den Kopf will.</p>
<p>Wie werden Ereignisse von Steuerelementen bearbeitet ?</p>
<p>Ich habe einen Timer, welcher alle 100ms ein Bitmap einblendet und ausblendet, und einen Button, welcher durch ShowModal eine zweite Form anzeigt. Der Code des Buttons lautet folgendermassen :</p>
<pre><code class="language-cpp">Form3-&gt;ShowModal();
</code></pre>
<p>Wenn ich nun das Programm laufen lasse und Form3 lade, blinkt jedoch das Bitmap Weiter <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Wenn ich stattdessen</p>
<pre><code class="language-cpp">this-&gt;Timer1-&gt;Enabled = false;
	Form3-&gt;ShowModal();
	this-&gt;Timer1-&gt;Enabled = true;
</code></pre>
<p>schreibe, wird das geblinke von mir aus gesehen korrekt angehalten.</p>
<p>Wie ist es möglich, dass das Hauptfenster Befehle ausführt, obwohl ich in einem sperrenden ShowModal festhänge.<br />
Mein Gedanke dazu war, dass Windows Forms jedes Ereigniss in einem separaten Thread abarbeitet, jedoch kann ich mir dann nicht vorstellen wie die gemeinsame Datennutzung geregelt wird, damit sich nicht zwei Aktionen versehens ins Haar geraten.</p>
<p>Thx Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/176378/windows-forms-ereignisse</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 04:58:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/176378.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 20 Mar 2007 17:19:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Windows Forms Ereignisse on Tue, 20 Mar 2007 17:19:24 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich habe gerade neu angefangen mit der Windows Forms programmierung und bin auf etwas gestossen das mir nicht in den Kopf will.</p>
<p>Wie werden Ereignisse von Steuerelementen bearbeitet ?</p>
<p>Ich habe einen Timer, welcher alle 100ms ein Bitmap einblendet und ausblendet, und einen Button, welcher durch ShowModal eine zweite Form anzeigt. Der Code des Buttons lautet folgendermassen :</p>
<pre><code class="language-cpp">Form3-&gt;ShowModal();
</code></pre>
<p>Wenn ich nun das Programm laufen lasse und Form3 lade, blinkt jedoch das Bitmap Weiter <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Wenn ich stattdessen</p>
<pre><code class="language-cpp">this-&gt;Timer1-&gt;Enabled = false;
	Form3-&gt;ShowModal();
	this-&gt;Timer1-&gt;Enabled = true;
</code></pre>
<p>schreibe, wird das geblinke von mir aus gesehen korrekt angehalten.</p>
<p>Wie ist es möglich, dass das Hauptfenster Befehle ausführt, obwohl ich in einem sperrenden ShowModal festhänge.<br />
Mein Gedanke dazu war, dass Windows Forms jedes Ereigniss in einem separaten Thread abarbeitet, jedoch kann ich mir dann nicht vorstellen wie die gemeinsame Datennutzung geregelt wird, damit sich nicht zwei Aktionen versehens ins Haar geraten.</p>
<p>Thx Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249264</guid><dc:creator><![CDATA[noobc]]></dc:creator><pubDate>Tue, 20 Mar 2007 17:19:24 GMT</pubDate></item><item><title><![CDATA[Reply to Windows Forms Ereignisse on Tue, 20 Mar 2007 17:31:38 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Nur weil der User nicht auf ein Form zugreifen kann heißt das noch lange nicht das das Programm selber bzw. Windows nicht darauf zugreifen und damit arbeiten kann. Da hat nichts mit zusätzlichen Threads zu tun.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249270</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 20 Mar 2007 17:31:38 GMT</pubDate></item><item><title><![CDATA[Reply to Windows Forms Ereignisse on Tue, 20 Mar 2007 17:58:56 GMT]]></title><description><![CDATA[<p>Hmm... ja leuchtet ein nur..</p>
<pre><code class="language-cpp">DWORD zwischensumme;
DWORD resultat;
DWORD irgendwas;

//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
	zwischensumme = 1;
	irgendwas = zwischensumme;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	zwischensumme = 5;
        Form3-&gt;ShowModal();
	resultat = zwischensumme;
}
//---------------------------------------------------------------------------
</code></pre>
<p>Wenn ich das Programmiere kann ich mir ja nie sicher sein, ob die Daten, in diesem Beispiel die Variabel zwischensumme nicht durch irgend ein anderes, plötzlich auftretendes Ereigniss geändert wird.</p>
<p>Wenn im obigen Beispiel nach dem Laden von Form3 ein Timerereigniss ausgelöst wird, ist die Variabel resultat nach dem Schliessen von Form3 1 und nicht wie erwartet 5.</p>
<p>Beim Anzeigen einer weiteren Form ist das Ganze noch durch erhöhten Aufwand zu korrigieren, was aber wenn das Ereigniss unerwartet durch eine externe Hardware oder sonstwas ausgelöst wird.<br />
Muss ich jedesmal beim abarbeiten eines Ereignisses alle anderen Ereignissquellen deaktivieren ? Wäre ja doch etwas umständlich, wie löst man dieses Problem ??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249285</guid><dc:creator><![CDATA[noobc]]></dc:creator><pubDate>Tue, 20 Mar 2007 17:58:56 GMT</pubDate></item><item><title><![CDATA[Reply to Windows Forms Ereignisse on Tue, 20 Mar 2007 18:10:02 GMT]]></title><description><![CDATA[<p>noobc schrieb:</p>
<blockquote>
<p>Wenn ich das Programmiere kann ich mir ja nie sicher sein, ob die Daten, in diesem Beispiel die Variabel zwischensumme nicht durch irgend ein anderes, plötzlich auftretendes Ereigniss geändert wird.</p>
</blockquote>
<p>Diese &quot;plötzlich auftretenden Ereignisse&quot; treten ja nicht aus heiterem Himmel auf, sondern nur, wenn du sie entsprechend programmiert hast. Und dabei musst du halt berücksichtigen, welche Auswirkungen das an anderer Stelle haben kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249296</guid><dc:creator><![CDATA[Jansen]]></dc:creator><pubDate>Tue, 20 Mar 2007 18:10:02 GMT</pubDate></item><item><title><![CDATA[Reply to Windows Forms Ereignisse on Tue, 20 Mar 2007 18:19:35 GMT]]></title><description><![CDATA[<p>Wie ich jetzt festgestellt habe, tritt das Problem ja bei ShowModal auf, wenn ich jedoch aus der Windows.h die Funktion Sleep() nehme, bleibt selbst der Timer still, wie unterscheidet sich dann ShowModal von Sleep(), beide Befehle stoppen ja das Programm an der Stelle.</p>
<p>Zu der Sache mit den plötzlichen Ereignissen zählen bei mir zum Beispiel ein SerialPort Ereigniss, welches ausgelöst wird, sobald die Serielle Schnittstelle Daten empfangen hat.<br />
Wenn ich daran einen Mikrocontroller anhänge, welcher auf Knopfdruck daten an die Schnittstelle sendet ist das für mich ein unerwartetes oder zumindest plötzlich auftretendes Ereigniss, welches ich ja nicht nach dem Programmcode richten kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249302</guid><dc:creator><![CDATA[noobc]]></dc:creator><pubDate>Tue, 20 Mar 2007 18:19:35 GMT</pubDate></item><item><title><![CDATA[Reply to Windows Forms Ereignisse on Tue, 20 Mar 2007 18:38:48 GMT]]></title><description><![CDATA[<p>Von diesem Ereignis bekommt dein Programm doch aber nur etwas mit, weil du eine entsprechende Abfrage oder EventHandler eingebaut hast. Also nichts mit plötzlich und unerwartet.<br />
Wenn am SerialPort was eintrifft dann wertest du im entsprechenden Event halt den Empfangspuffer aus. Ein Konflikt kann dabei eigentlich nicht auftreten, denn es macht ja keinen Sinn, in den Puffer auch von anderer Stelle im Programm aus zu schreiben.</p>
<p>ShowModal stoppt nichts sondern blockiert nur Benutzereinwirkungen auf die &quot;Hintergrund-Form&quot;. Sleep hält das gesamte Programm an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249319</guid><dc:creator><![CDATA[Jansen]]></dc:creator><pubDate>Tue, 20 Mar 2007 18:38:48 GMT</pubDate></item><item><title><![CDATA[Reply to Windows Forms Ereignisse on Tue, 20 Mar 2007 18:52:01 GMT]]></title><description><![CDATA[<p>Ok, langsam blicke ich etwas durch, nur die Funktion ShowModal begreife ich nicht komplett.</p>
<p>Bei meinem jetztigen Wissensstand muss ich mir vorstellen, dass die Ereignissfunktion bei ShowModal verlassen wird und somit der nachfolgende Text in der Funktion übersprungen wird, damit die anderen Ereignissfunktionen trotzdehm ausgeführt werden können.<br />
Bei Sleep() wird die Funktion jedoch nicht verlassen, sondern nur um eine bestimmte Zeit angehalten, was dann die Abarbeitung anderer Ereignisse blockiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249325</guid><dc:creator><![CDATA[noobc]]></dc:creator><pubDate>Tue, 20 Mar 2007 18:52:01 GMT</pubDate></item><item><title><![CDATA[Reply to Windows Forms Ereignisse on Tue, 20 Mar 2007 18:57:57 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Alles was bei ShowModal um Unterschied zu Show getan wird ist zusätzlich den Userinput aller Art auf das untere Form zu verhindern. Den Effekt kannst du sogar selber erzeugen indem du bei einem Form Enabled auf false setzt.<br />
Dadurch wird aber nicht verhindert das Windows-Messages (Userinputs sind nur ein Teil der Windows-Messages) vom unterem Form verarbeitet werden. Genausowenig wie das zwei einzelnen nebeneinanderlaufenden Programmen verhindert wird.</p>
<p>sleep hingegen hält das Program ganz an. Es werden überhaupt keine Windows-Messages verarbeitet, das ganze Programm &quot;friert ein&quot;.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249327</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 20 Mar 2007 18:57:57 GMT</pubDate></item><item><title><![CDATA[Reply to Windows Forms Ereignisse on Tue, 20 Mar 2007 19:28:35 GMT]]></title><description><![CDATA[<p>Puh, braucht wohl etwas Nerven mit mir hier im Forum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Wenn ich nun folgendes versuche</p>
<pre><code class="language-cpp">void __fastcall TForm1::Button1Click(TObject *Sender)
{
	Form3-&gt;ShowModal();
	zwischenresultat = 3;
}
</code></pre>
<p>und beim Debugger einen Haltepunkt bei zwischenresultat = 3; setze, wird der Haltepunkt erst erreicht, wenn ich Form3 wieder schliesse.</p>
<p>Wenn ich jedoch</p>
<pre><code class="language-cpp">void __fastcall TForm1::Button1Click(TObject *Sender)
{
	Form3-&gt;Show();
        this-&gt;Enabled = false;  // Hauptfenster disable
	zwischenresultat = 3;
}
</code></pre>
<p>schreibe, wird der Haltepunkt sofot nach Knopfdruck erreicht.</p>
<p>Wenn ich Sleep() anstelle von ShowModal() setze wird das ganze Programm unterbrochen.</p>
<p>Springt das Programm bei ShowModal, solange ModalResult null ist aus der Funktion raus, oder wie muss ich mir das vorstellen, was macht denn ShowModal anders als Sleep, beide unterbrechen ja den Programmablauf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249352</guid><dc:creator><![CDATA[noobc]]></dc:creator><pubDate>Tue, 20 Mar 2007 19:28:35 GMT</pubDate></item><item><title><![CDATA[Reply to Windows Forms Ereignisse on Tue, 20 Mar 2007 20:34:09 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Für alle drei Varianten gilt : Dein Programm arbeitet rein sequentiell.<br />
Selbst beim Beispiel mit Show. Es wird zuerst das zweite Form angezeigt und alle nötigen Messages und Events verarbeitet. Erst dann kehrt Show zurück zu der nächsten Zeile und führt zwischenresultat... aus. Da das so schnell geht bekommst du davon aber nicht viel mit.<br />
Aber du kannst dem Form3 ja mal ein OnShow-Event mit einer sinnvollen Zuweisung spendieren und dort einen Breakpoint setzen. Plötzlich wirst du mit dem Debugger merken das er in Form3 springt und den Show-Event abarbeitet. Erst wenn das erledigt ist wird mit zwischenresultat weitergemacht.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249416</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 20 Mar 2007 20:34:09 GMT</pubDate></item><item><title><![CDATA[Reply to Windows Forms Ereignisse on Wed, 21 Mar 2007 09:33:16 GMT]]></title><description><![CDATA[<p>Was so nicht explizit erwähnt wurde: Die Timer-Funktion wird deswegen weiter ausgeführt, weil Timer Nachrichtengesteuert funktionieren. Deshalb wird die Timerfunktion, trotz des ShowModal-Aufrufs, weiter abgearbeitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249613</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 21 Mar 2007 09:33:16 GMT</pubDate></item><item><title><![CDATA[Reply to Windows Forms Ereignisse on Wed, 21 Mar 2007 11:40:52 GMT]]></title><description><![CDATA[<pre><code>ShowModal(Form3) == 
repeat
{
   Application-&gt;ProcessNonInputMessages();
}
until Form3 closes
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1249699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249699</guid><dc:creator><![CDATA[WebFritzi]]></dc:creator><pubDate>Wed, 21 Mar 2007 11:40:52 GMT</pubDate></item><item><title><![CDATA[Reply to Windows Forms Ereignisse on Wed, 21 Mar 2007 11:52:12 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249708</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 21 Mar 2007 11:52:12 GMT</pubDate></item><item><title><![CDATA[Reply to Windows Forms Ereignisse on Wed, 21 Mar 2007 11:57:17 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249715</guid><dc:creator><![CDATA[WebFritzi]]></dc:creator><pubDate>Wed, 21 Mar 2007 11:57:17 GMT</pubDate></item><item><title><![CDATA[Reply to Windows Forms Ereignisse on Wed, 21 Mar 2007 12:23:37 GMT]]></title><description><![CDATA[<p>Na ja, was soll denn der Schwachsinn?!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249743</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 21 Mar 2007 12:23:37 GMT</pubDate></item><item><title><![CDATA[Reply to Windows Forms Ereignisse on Wed, 21 Mar 2007 13:06:43 GMT]]></title><description><![CDATA[<p>Kannst du mir sagen, warum du mich so angreifst? Ich wollte damit erklären, was ShowModal() bewirkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249767</guid><dc:creator><![CDATA[WebFritzi]]></dc:creator><pubDate>Wed, 21 Mar 2007 13:06:43 GMT</pubDate></item><item><title><![CDATA[Reply to Windows Forms Ereignisse on Wed, 21 Mar 2007 14:24:49 GMT]]></title><description><![CDATA[<p>Da wär ich aber nie drauf gekommen, wenn Du es nicht noch dazu geschrieben hättest...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249836</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 21 Mar 2007 14:24:49 GMT</pubDate></item><item><title><![CDATA[Reply to Windows Forms Ereignisse on Wed, 21 Mar 2007 14:37:06 GMT]]></title><description><![CDATA[<p>Lange Leitung... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249842</guid><dc:creator><![CDATA[WebFritzi]]></dc:creator><pubDate>Wed, 21 Mar 2007 14:37:06 GMT</pubDate></item></channel></rss>