<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>zur Archive - Robert Skibbe</title>
	<atom:link href="https://robbelroot.de/blog/tag/zur/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>alias RobbelRoot – Freelance Full Stack Developer .NET</description>
	<lastBuildDate>Sun, 19 Sep 2021 13:12:25 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://robbelroot.de/wp-content/uploads/2020/12/cropped-favicon-32x32.png</url>
	<title>zur Archive - Robert Skibbe</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>VB.NET Button zur Laufzeit erstellen</title>
		<link>https://robbelroot.de/blog/vbnet-button-zur-laufzeit-erstellen/</link>
					<comments>https://robbelroot.de/blog/vbnet-button-zur-laufzeit-erstellen/#respond</comments>
		
		<dc:creator><![CDATA[Robert Skibbe]]></dc:creator>
		<pubDate>Wed, 30 Jun 2021 14:51:56 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Visual Basic .NET]]></category>
		<category><![CDATA[Visual Basic .NET Problemlösungen]]></category>
		<category><![CDATA[at]]></category>
		<category><![CDATA[button]]></category>
		<category><![CDATA[click]]></category>
		<category><![CDATA[create]]></category>
		<category><![CDATA[klicken]]></category>
		<category><![CDATA[knopf]]></category>
		<category><![CDATA[laufzeit]]></category>
		<category><![CDATA[runtime]]></category>
		<category><![CDATA[schaltfläche]]></category>
		<category><![CDATA[vb.net]]></category>
		<category><![CDATA[vbnet]]></category>
		<category><![CDATA[zur]]></category>
		<guid isPermaLink="false">https://robbelroot.de/?p=2581</guid>

					<description><![CDATA[<p>VB.NET Button zur Laufzeit erstellen In VB.NET einen Button zur Laufzeit erstellen kann als Anfänger schwierig sein, muss es mit meinem Beispiel jedoch nicht! Ich werde Dir unter Anderem zeigen, wie wir die AddHandler-Anweisung dazu verwenden. Zusätzlich benötigen wir den AddressOf-Operator, um an die jeweilige Adresse der Ziel-Methode zu kommen. &#8230;</p>
<p>Der Beitrag <a href="https://robbelroot.de/blog/vbnet-button-zur-laufzeit-erstellen/">VB.NET Button zur Laufzeit erstellen</a> erschien zuerst auf <a href="https://robbelroot.de">Robert Skibbe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><a href="https://robbelroot.de/wp-content/uploads/2021/06/VB.NET-Button-zur-Laufzeit-erstellen.png"><img fetchpriority="high" decoding="async" width="1024" height="536" src="https://robbelroot.de/wp-content/uploads/2021/06/VB.NET-Button-zur-Laufzeit-erstellen-1024x536.png" alt="VB.NET Button zur Laufzeit erstellen" class="wp-image-2601" title="VB.NET Button zur Laufzeit erstellen" srcset="https://robbelroot.de/wp-content/uploads/2021/06/VB.NET-Button-zur-Laufzeit-erstellen-1024x536.png 1024w, https://robbelroot.de/wp-content/uploads/2021/06/VB.NET-Button-zur-Laufzeit-erstellen-300x157.png 300w, https://robbelroot.de/wp-content/uploads/2021/06/VB.NET-Button-zur-Laufzeit-erstellen-768x402.png 768w, https://robbelroot.de/wp-content/uploads/2021/06/VB.NET-Button-zur-Laufzeit-erstellen-700x366.png 700w, https://robbelroot.de/wp-content/uploads/2021/06/VB.NET-Button-zur-Laufzeit-erstellen-332x174.png 332w, https://robbelroot.de/wp-content/uploads/2021/06/VB.NET-Button-zur-Laufzeit-erstellen.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption>VB.NET Button zur Laufzeit erstellen</figcaption></figure>






<h2 class="wp-block-heading">VB.NET Button zur Laufzeit erstellen</h2>



<p>In <strong>VB.NET einen Button zur Laufzeit erstellen</strong> kann <strong>als Anfänger schwierig</strong> sein, muss es <strong>mit meinem Beispiel</strong> jedoch <strong>nicht</strong>!</p>



<p>Ich werde Dir <strong>unter Anderem</strong> zeigen, <strong>wie </strong>wir die <strong><a href="https://docs.microsoft.com/de-de/dotnet/visual-basic/language-reference/statements/addhandler-statement" target="_blank" rel="noreferrer noopener">AddHandler-Anweisung</a></strong> dazu verwenden.</p>



<p><strong>Zusätzlich </strong>benötigen wir den <strong><a href="https://docs.microsoft.com/de-de/dotnet/visual-basic/language-reference//operators/addressof-operator" target="_blank" rel="noreferrer noopener">AddressOf-Operator</a></strong>, um an die jeweilige <strong>Adresse der Ziel-Methode</strong> zu kommen.</p>



<h3 class="wp-block-heading">VB.NET Button Beispiel – Allgemein</h3>



<p><strong>Falls </strong>Du Dich bisher <strong>noch nicht </strong>allzu tiefgehend <strong>mit </strong>dem <strong>Button beschäftigt </strong>hast, <strong>empfehle ich </strong>Dir mein <strong><a href="https://robbelroot.de/blog/vbnet-button-beispiel/" target="_blank" rel="noreferrer noopener">allgemeines Button Beispiel</a></strong>.</p>



<p>In diesem Beitrag erkläre ich <strong>alle Dir</strong> alles Wissenwerte <strong>über </strong>das <strong>Button-Control</strong>, wie z. B. <strong>Eigenschaften</strong>, <strong>Methoden </strong>und dessen <strong>Funktionsweise</strong>.</p>



<p>Der <strong>heutige Beitrag </strong>handelt hingegen von einem <strong>Thema</strong>, auf das man eher <strong>später </strong>– aber definitiv – stößt.</p>



<p><strong>Normalerweise </strong>designt man seine <strong>Oberfläche </strong>ja für gewöhnlich <strong>in </strong>der dafür vorgesehenen <strong>Designer-Oberfläche</strong>, aber <strong>manchmal reicht </strong>dies <strong>nicht </strong>aus.</p>



<h2 class="wp-block-heading">Der Button – Eine kleine Wiederholung</h2>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/09/Button-–-eine-kleine-Wiederholung.jpg"><img decoding="async" width="640" height="361" src="https://robbelroot.de/wp-content/uploads/2021/09/Button-–-eine-kleine-Wiederholung.jpg" alt="Button – eine kleine Wiederholung" class="wp-image-6047" title="Button – eine kleine Wiederholung"/></a><figcaption>Button – eine kleine Wiederholung</figcaption></figure>



<h3 class="wp-block-heading">Unendliche Einsatzmöglichkeiten</h3>



<p><strong>Wie Du in <a href="/blog/vbnet-button-beispiel/" target="_blank" rel="noreferrer noopener">meinem anderen Beitrag</a></strong> schon erfahren konntest, ist der <strong>Button</strong> so ziemlich <strong>eines der</strong> absoluten Basic-Controls.</p>



<p>Die <strong>Nutzungsmöglichkeiten</strong> sind <strong>schier unendlich</strong>:</p>



<ul class="wp-block-list"><li>Zum <strong>Drucken </strong>von <strong>Rechnungen</strong></li><li><strong>Öffnen </strong>eines Detail-<strong>Fensters</strong></li><li>Das <strong>ausführen </strong>einer <strong>Suche</strong></li><li>Bearbeitete <strong>Daten </strong>zu <strong>speichern</strong></li><li>und viel <strong>viel mehr</strong>!</li></ul>



<h3 class="wp-block-heading">Das Click-Ereignis</h3>



<p><strong>Wenn Du </strong>Dich <strong>noch erinnern </strong>kannst, bzw. es vielleicht noch weißt, <strong>brauchen </strong>wir für die Verwendung des <strong>Buttons im Wesentlichen</strong> das wichtigste <strong>Ereignis</strong>: Das <strong>Click-Ereignis</strong>.</p>



<h3 class="wp-block-heading">Verschiedene Button-Zustände</h3>



<p>Auch mehr als <strong>bekannt</strong>, sind die <strong>verschiedenen Zustände</strong>, die der Button für gewöhnlich einnehmen kann.</p>



<p><strong>Darunter </strong>sind wohl die <strong>gängigsten States</strong>, der &#8222;<strong>Hover</strong>&#8222;, &#8222;<strong>Disabled</strong>&#8220; und &#8222;<strong>Loading</strong>&#8220; State.</p>



<p>Etwas <strong>abwegiger</strong>, jedoch ein <strong>moderner Augenschmaus </strong>sind vor allem aus &#8222;<strong>Material-Design</strong>&#8220; orientierten <strong>Steuerelementen </strong>bekannt, ist z. B. der &#8222;<strong>Ripple</strong>&#8222;-Effekt.</p>



<p>Wie der Name schon sagt eher ein <strong>Effekt </strong>und <strong>kein State</strong>, aber dennoch <strong>sehr gängig</strong>.</p>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/09/Moderne-Button-Zustaende-und-Effekte.gif"><img decoding="async" width="284" height="262" src="https://robbelroot.de/wp-content/uploads/2021/09/Moderne-Button-Zustaende-und-Effekte.gif" alt="Moderne Button Zustände und Effekte" class="wp-image-6055" title="Moderne Button Zustände und Effekte"/></a><figcaption>Moderne Button Zustände und Effekte</figcaption></figure>



<h2 class="wp-block-heading">VB.NET Button zur Laufzeit erstellen</h2>



<p>Im <strong>Laufe Deiner </strong>Visual Basic .NET <strong>Karriere</strong>, <strong>kann </strong>es durchaus <strong>vorkommen</strong>, <strong>dass </strong>Du einen <strong>Button auch </strong>mal <strong>zur Laufzeit erstellen </strong>möchtest, bzw. musst.</p>



<p>Ein <strong>konkreter </strong>mir einfallender <strong>Anwendungsfall </strong>wäre z. B. die dynamische <strong>Erstellung einer virtuellen Tastatur</strong>.</p>



<p>Stell Dir vor, Du <strong>schaltest in </strong>der <strong>virtuellen Tastatur</strong> <strong>auf </strong>einen <strong>anderen Modus</strong> – man <strong>kennt </strong>es z. B. <strong>von Handytastaturen</strong>.</p>



<p>Dann <strong>könntest</strong> Du die <strong>vorhandenen Buttons </strong>durch andere Buttons <strong>dynamisch ersetzen</strong>.</p>



<h3 class="wp-block-heading">Auf Form-Ebene</h3>



<p>Den <strong>Button auf Form</strong>-Ebene zu <strong>erstellen </strong>ist praktisch <strong>analog </strong>zum <strong>Weg über </strong>den <strong>Designer</strong>, jedoch eben nur <strong>pur Code-Datei basiert</strong>.</p>



<h4 class="wp-block-heading">Der Code der Form</h4>



<h5 class="wp-block-heading">Konstruktor</h5>



<p>Im Form-<strong>Konstruktor</strong> <strong>initialisieren </strong>wir den <strong>Button mit </strong>einer <strong>neuen Instanz</strong>.</p>



<p>Wir könnten dies auch <strong>alternativ auch </strong>im <strong>Load</strong>-Ereignis machen, <strong>allerdings </strong>macht es im <strong>Konstruktor</strong> für mich persönlich <strong>mehr Sinn</strong>.</p>



<p><strong>Im Konstruktor wird – wer hätte das gedacht – konstruiert</strong>, primär die Form, aber auch all das was dazu gehört.</p>



<p>Darunter fallen natürlich <strong>auch </strong>die <strong>Kind-Elemente</strong>, zumindest wenn keine <strong>Dependency Injection</strong> o. Ä. verwendet wird..</p>



<p>Die <strong>letzte Zeile</strong> <strong>erkläre </strong>ich <a href="#formweit-beispiel-ohne-handles-klausel"><strong>hier</strong></a>, im Teil der &#8222;<strong>WithoutHandlesClause</strong>&#8222;-Methode</p>



<h4 class="wp-block-heading">WithHandlesClause – Click-Eventhandler</h4>



<p><strong>Diese Sub</strong> ist <strong>wie üblich via Handles-Klausel verknüpft</strong>, das <strong>geht </strong>deshalb, <strong>weil </strong>wir den <strong>Button</strong> auf Form-Ebene <strong>und </strong>mit <strong>WithEvents deklariert </strong>haben.</p>



<h4 class="wp-block-heading" id="formweit-beispiel-ohne-handles-klausel">WithoutHandlesClause – Click-Eventhandler</h4>



<p>Diese Methode <strong>wird dynamisch</strong> <strong>durch </strong>die <strong>AddHandler</strong>-Anweisung im Konstruktor <strong>mit </strong>dem <strong>Click-Event des Timers verknüpft</strong>.</p>



<p>Diese <strong>Vorgehensweise </strong>ist <strong>praktisch das Kernelement</strong> des ersten Beispiels.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Imports System.Diagnostics

Public Class Form1

    Private WithEvents Button As Button

    Sub New()
        InitializeComponent()
        Button = New Button()
        AddHandler Button.Click, AddressOf WithoutHandlesClause
    End Sub

    Private Sub WithHandlesClause(sender As Object, e As EventArgs) Handles Button.Click
        Debug.WriteLine("WithHandlesClause")
    End Sub

    Private Sub WithoutHandlesClause(sender As Object, e As EventArgs)
        Debug.WriteLine("WithoutHandlesClause")
    End Sub

End Class</pre>



<h3 class="wp-block-heading">Durch Button-Click</h3>



<p><strong>Hier zeige </strong>ich, <strong>wie </strong>man einen <strong>Button durch </strong>das <strong>Klicken </strong>eines <strong>weiteren Buttons</strong> erstellen kann.</p>



<p><strong>Ebenso wie </strong>im <strong>vorherigen </strong>Beispiel, greife ich <strong>hier </strong>auf eine <strong>bereits existierende Methode</strong> in der Form zurück.</p>



<p>Wir <strong>instanziieren </strong>zuerst einen <strong>neuen Button</strong>, weisen Ihm anschließend <strong>einige Eigenschaften</strong> zu und <strong>fügen </strong>Ihn <strong>dann </strong>zur Darstellung der <strong>Form hinzu</strong>.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Private Sub btnCreateButton_Click(sender As Object, e As EventArgs)
    Dim button = new Button()
    button.Location = new Point(50, 80)
    button.Height = 23
    button.Width = 75
    button.Text = "Dynamic woohoo"
    AddHandler button.Click, AddressOf MyClick
    Controls.Add(button)
End Sub

Private Sub MyClick(sender As Object, e As EventArgs)
   System.Diagnostics.Debug.WriteLine("MyClick")
End Sub</pre>



<h3 class="wp-block-heading">VB.NET Button zur Laufzeit erstellen – Mit anonymen Handler</h3>



<p>Im <strong>letzten </strong>Beispiel <strong>zeige </strong>ich Dir eine Vorgehensweise mit einer <strong>anonymen Handler</strong>-Methode.</p>



<p>Natürlich musst Du auch hier auf die <strong>korrekte Signatur</strong> der Methode, also der <strong>korrekten Anzahl</strong> und der <strong>richtigen Positionierung</strong> der <strong>Parameter </strong>achten.</p>



<h4 class="wp-block-heading">Mit anonymer Sub</h4>



<p>In <strong>diesem Fall</strong> brauchst Du den <strong>AddressOf-Operator</strong> nicht, da Du die <strong>Methode </strong>ja <strong>namentlich nennen </strong>und somit an Ihre &#8222;<strong>Adresse</strong>&#8220; <strong>kommen </strong>kannst.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Private Sub btnCreateButton_Click(sender As Object, e As EventArgs)
    Dim button = new Button()
    button.Location = new Point(50, 80)
    button.Height = 23
    button.Width = 75
    button.Text = "Dynamic woohoo"
    AddHandler button.Click, Sub(sender, e)
                                 Debug.WriteLine("anonymous")
                             End Sub
    Controls.Add(button)
End Sub</pre>



<h4 class="wp-block-heading">Mit anonymer Sub und Variable</h4>



<p>Du hast sogar die Möglichkeit, diesen Handler in eine Variable zu stecken, bzw. zu speichern und dann via AddHandler zuzuweisen:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Private Sub btnCreateButton_Click(sender As Object, e As EventArgs)
    Dim button = new Button()
    button.Location = new Point(50, 80)
    button.Height = 23
    button.Width = 75
    button.Text = "Dynamic woohoo"
    Dim dynamicCreatedHandler = Sub(sender, e)
                                    Debug.WriteLine("anonymous")
                                End Sub
    AddHandler button.Click, dynamicCreatedHandler
    Controls.Add(button)
End Sub</pre>



<h2 class="wp-block-heading">Downloads</h2>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link" href="/downloads/vbnet/CreateButtonAtRuntime.zip" target="_blank" rel="noreferrer noopener">CreateButtonAtRuntime Example</a></div>
</div>



<p></p>
<p>Der Beitrag <a href="https://robbelroot.de/blog/vbnet-button-zur-laufzeit-erstellen/">VB.NET Button zur Laufzeit erstellen</a> erschien zuerst auf <a href="https://robbelroot.de">Robert Skibbe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://robbelroot.de/blog/vbnet-button-zur-laufzeit-erstellen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VB.NET Timer zur Laufzeit erstellen</title>
		<link>https://robbelroot.de/blog/vb-net-timer-zur-laufzeit-erstellen/</link>
					<comments>https://robbelroot.de/blog/vb-net-timer-zur-laufzeit-erstellen/#comments</comments>
		
		<dc:creator><![CDATA[Robert Skibbe]]></dc:creator>
		<pubDate>Sat, 26 Jun 2021 19:40:56 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Visual Basic .NET]]></category>
		<category><![CDATA[Visual Basic .NET Problemlösungen]]></category>
		<category><![CDATA[control]]></category>
		<category><![CDATA[create]]></category>
		<category><![CDATA[erstellen]]></category>
		<category><![CDATA[interval]]></category>
		<category><![CDATA[intervall]]></category>
		<category><![CDATA[laufzeit]]></category>
		<category><![CDATA[object]]></category>
		<category><![CDATA[runtime]]></category>
		<category><![CDATA[steuerelement]]></category>
		<category><![CDATA[timer]]></category>
		<category><![CDATA[vb.net]]></category>
		<category><![CDATA[vbnet]]></category>
		<category><![CDATA[zeitgeber]]></category>
		<category><![CDATA[zur]]></category>
		<guid isPermaLink="false">https://robbelroot.de/?p=2295</guid>

					<description><![CDATA[<p>VB.NET Timer zur Laufzeit erstellen In diesem Beitrag werde ich Dir erklären, wie man in VB.NET einen Timer zur Laufzeit erstellen kann. Dabei wirst Du unter Anderem sehen, wie die AddHandler-Anweisung zum Einsatz kommt. In Kombination dazu, benötigen wir auch den AddressOf-Operator, um an die &#8222;Adresse&#8220; der zu verknüpfenden Methode &#8230;</p>
<p>Der Beitrag <a href="https://robbelroot.de/blog/vb-net-timer-zur-laufzeit-erstellen/">VB.NET Timer zur Laufzeit erstellen</a> erschien zuerst auf <a href="https://robbelroot.de">Robert Skibbe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><a href="https://robbelroot.de/wp-content/uploads/2021/06/VB.NET-Timer-zur-Laufzeit-erstellen.png"><img loading="lazy" decoding="async" width="1024" height="536" src="https://robbelroot.de/wp-content/uploads/2021/06/VB.NET-Timer-zur-Laufzeit-erstellen-1024x536.png" alt="" class="wp-image-2303" srcset="https://robbelroot.de/wp-content/uploads/2021/06/VB.NET-Timer-zur-Laufzeit-erstellen-1024x536.png 1024w, https://robbelroot.de/wp-content/uploads/2021/06/VB.NET-Timer-zur-Laufzeit-erstellen-300x157.png 300w, https://robbelroot.de/wp-content/uploads/2021/06/VB.NET-Timer-zur-Laufzeit-erstellen-768x402.png 768w, https://robbelroot.de/wp-content/uploads/2021/06/VB.NET-Timer-zur-Laufzeit-erstellen-700x366.png 700w, https://robbelroot.de/wp-content/uploads/2021/06/VB.NET-Timer-zur-Laufzeit-erstellen-332x174.png 332w, https://robbelroot.de/wp-content/uploads/2021/06/VB.NET-Timer-zur-Laufzeit-erstellen.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption>VB.NET Timer zur Laufzeit erstellen</figcaption></figure>






<h2 class="wp-block-heading">VB.NET Timer zur Laufzeit erstellen</h2>



<p>In <strong>diesem Beitrag</strong> werde ich Dir erklären, wie man in <strong>VB.NET einen Timer zur Laufzeit erstellen</strong> kann.</p>



<p>Dabei wirst Du <strong>unter Anderem</strong> sehen, <strong>wie </strong>die <strong><a href="https://docs.microsoft.com/de-de/dotnet/visual-basic/language-reference/statements/addhandler-statement" target="_blank" rel="noreferrer noopener">AddHandler-Anweisung</a></strong> zum Einsatz kommt.</p>



<p><strong>In Kombination</strong> dazu, <strong>benötigen </strong>wir auch den <strong><a href="https://docs.microsoft.com/de-de/dotnet/visual-basic/language-reference//operators/addressof-operator" target="_blank" rel="noreferrer noopener">AddressOf-Operator</a></strong>, <strong>um </strong>an die &#8222;<strong>Adresse</strong>&#8220; der zu <strong>verknüpfenden Methode </strong>zu kommen.</p>



<p>Diese <strong>beiden Werkzeuge</strong> brauchen wir, um<strong> </strong>das <strong><a href="https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.timer.tick?view=net-5.0" target="_blank" rel="noreferrer noopener">Tick-Ereignis</a></strong> <strong>dynamisch mit </strong>einer <strong>Methode verknüpfen</strong> zu können.</p>



<h2 class="wp-block-heading">VB.NET Timer Beispiel – Allgemein</h2>



<p>Falls du ein allgemeines Tutorial, bzw. ein <strong>allgemeines VB.NET Timer Beispiel</strong> suchst, wirst du <a href="/blog/vbnet-timer-beispiel-code-im-intervall-ausfuehren">in diesem Beitrag</a> auf meiner Seite fündig.</p>



<p>Dort erkläre ich <strong>alle Basics</strong> <strong>über </strong>das <strong>Timer-Control</strong>, wie z. B. <strong>Eigenschaften</strong>, <strong>Methoden </strong>und dessen <strong>Funktionsweise</strong>.</p>



<p><strong>Zusätzlich erzähle </strong>ich noch etwas <strong>über </strong>einen eigenen kleinen <strong>Bug </strong>den ich damals <strong>zuerst nicht gefunden</strong> habe und <strong>was </strong>man <strong>beachten </strong>muss.</p>



<h2 class="wp-block-heading">Timer – Eine kleine Wiederholung</h2>



<h3 class="wp-block-heading">Beispielreiche Einsatzmöglichkeiten</h3>



<p>Wie wir <strong><a href="https://robbelroot.de/blog/vbnet-timer-countdown/" target="_blank" rel="noreferrer noopener">im anderen Beitrag</a></strong> schon lernen konnten, ist der Timer dazu da, <strong>gewissen Code im Intervall zu wiederholen</strong>.</p>



<p>Die <strong>Einsatzbeispiele </strong>sind <strong>vielfältig</strong>:</p>



<ul class="wp-block-list"><li>Eine simple <strong>digitale Uhr</strong></li><li>Einen Kalender mit <strong>Termin-Synchronisation</strong></li><li>Einen <strong>Windows-Service</strong> der <strong>im Hintergrund</strong> eventuell Signale an eine <strong>Http-Schnittstelle</strong> sendet</li><li>uvm.</li></ul>



<h3 class="wp-block-heading">Das Tick-Ereignis</h3>



<p><strong>Falls </strong>Du Dich noch <strong>erinnern </strong>kannst, <strong>oder </strong>es ggf. bereits <strong>weißt</strong>, <strong>brauchen </strong>wir für die Verwendung des <strong>Timers hauptsächlich </strong>sein wichtigstes <strong>Ereignis</strong>: Das <strong>Tick-Ereignis</strong>.</p>



<h2 class="wp-block-heading">VB.NET Timer zur Laufzeit erstellen</h2>



<p>Nun <strong>kann</strong> es von Zeit zu Zeit <strong>vorkommen</strong>, <strong>dass man </strong>als .NET-Entwickler einen <strong>Timer zur Laufzeit erstellen</strong> möchte.</p>



<p>Sei es <strong>zum Beispiel für ein Spiel</strong> der Marke Eigenbau, <strong>sei es</strong> auch <strong>noch so klein</strong>, bzw. <strong>grafisch noch so schlicht</strong>.</p>



<h3 class="wp-block-heading">Achtung!</h3>



<figure class="wp-block-image size-large"><a href="https://robbelroot.de/wp-content/uploads/2021/06/achtung.png"><img loading="lazy" decoding="async" width="256" height="256" src="https://robbelroot.de/wp-content/uploads/2021/06/achtung.png" alt="Achtung bei der Erstellung mehrerer Timer" class="wp-image-2324" srcset="https://robbelroot.de/wp-content/uploads/2021/06/achtung.png 256w, https://robbelroot.de/wp-content/uploads/2021/06/achtung-150x150.png 150w" sizes="auto, (max-width: 256px) 100vw, 256px" /></a><figcaption>Achtung bei der Erstellung mehrerer Timer</figcaption></figure>



<p>Ich möchte <strong>bevor ich dir die Beispiele zeige</strong>, noch <strong>gerne </strong>einen <strong>gut gemeinten Rat</strong> ans Herz legen.</p>



<p><strong>Du solltest</strong> Dir bei dem <strong>Design Deiner</strong> kleinen <strong>Anwendung</strong>, deines <strong>Spiels</strong>, etc. <strong>im Klaren sein</strong>, <strong>dass </strong>es unter Umständen <strong>bessere Lösungen geben könnte</strong>, <strong>als </strong>nachher <strong>15 Timer</strong> zu haben – <strong>just saying</strong>.</p>



<p><strong>Überlege </strong>Dir daher ausgiebig, <strong>ob Dein Problem</strong> nicht eventuell <strong>mit wenigeren Timern</strong>, <strong>oder </strong>gar <strong>einem </strong>erledigt werden <strong>könnte</strong>.</p>



<p><strong>Allerdings </strong>sehe ich es auch <strong>teils relativ locker</strong>, denn <strong>das Lernen ist ein Prozess</strong> und man wird <strong>nun einmal</strong> meist <strong>nur durch </strong>das <strong>Probieren besser</strong> – behalt&#8216; es nur im Kopf!</p>



<h2 class="wp-block-heading">VB.NET Timer zur Laufzeit erstellen – Auf Form-Ebene</h2>



<p>Ist <strong>ähnlich dem Designer</strong>, <strong>nur halt pur Code-Datei basiert</strong>, sprich nicht im Designer.</p>



<h3 class="wp-block-heading">Der Code der Form</h3>



<h4 class="wp-block-heading">Konstruktor</h4>



<p>Im <strong>Konstruktor </strong>der <strong>Form </strong>initialisieren wir den <strong>Timer </strong>mit einer <strong>neuen Instanz</strong>.</p>



<p>Könnte <strong>alternativ auch </strong>im <strong>Load</strong>-Ereignis passieren, <strong>allerdings </strong>macht es für mich persönlich <strong>mehr Sinn </strong>im <strong>Konstruktor</strong>.</p>



<p><strong>Im Konstruktor wird halt konstruiert</strong> – auch die Kind-Elemente, zumindest wenn keine <strong>Dependency Injection</strong> o. Ä. verwendet wird..</p>



<p>Das <strong>auskommentierte Initialisierungs-Beispiel</strong> tut es dem Designer in der <strong>Designer-Datei gleich</strong>.</p>



<p>Die <strong>letzte Zeile</strong> <strong>erkläre </strong>ich <a href="#formweit-beispiel-ohne-handles-klausel"><strong>hier</strong></a>, im Teil der &#8222;<strong>WithoutHandlesClause</strong>&#8222;-Methode</p>



<h4 class="wp-block-heading">Form1_Load – Load-Ereignishandler</h4>



<p><strong>Im Ereignishandler</strong> für das &#8222;<strong>Form-Load</strong>&#8222;-Ereignis <strong>können wir</strong> den <strong>Timer </strong>dann <strong>per Timer.Start() starten</strong>. <strong>Alternativ </strong>könnte man natürlich auch hier, oder schon <strong>bei der Initialisierung</strong> &#8222;<strong>Enabled&#8220; auf True</strong> stellen, etc.</p>



<h4 class="wp-block-heading">WithHandlesClause – Tick-Eventhandler</h4>



<p><strong>Diese Sub</strong> ist <strong>wie üblich via Handles-Klausel verknüpft</strong>, das <strong>geht </strong>deshalb, <strong>weil </strong>wir den <strong>Timer</strong> auf Form-Ebene <strong>und </strong>mit <strong>WithEvents deklariert </strong>haben.</p>



<h4 class="wp-block-heading" id="formweit-beispiel-ohne-handles-klausel">WithoutHandlesClause – Tick-Eventhandler</h4>



<p>Diese Methode <strong>wird dynamisch</strong> <strong>durch </strong>die <strong>AddHandler</strong>-Anweisung im Konstruktor <strong>mit </strong>dem <strong>Tick-Event des Timers verknüpft</strong>. Diese <strong>Vorgehensweise </strong>ist <strong>praktisch das Kernelement</strong> des ersten Beispiels.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Imports System.Diagnostics

Public Class Form1

    Private WithEvents Timer As Timer

    Sub New()
        InitializeComponent()
        Timer = New Timer()
        ' this is how the designer does it internally
        ' Timer = New Timer(Me.components)
        AddHandler Timer.Tick, AddressOf WithoutHandlesClause
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' or use Enabled = True above or here
        Timer.Start()
    End Sub

    Private Sub WithHandlesClause(sender As Object, e As EventArgs) Handles tmrTime.Tick
        Debug.WriteLine("WithHandlesClause")
    End Sub

    Private Sub WithoutHandlesClause(sender As Object, e As EventArgs)
        Debug.WriteLine("WithoutHandlesClause")
    End Sub

End Class</pre>



<h2 class="wp-block-heading">VB.NET Timer zur Laufzeit erstellen – Durch Button-Klick</h2>



<p>In <strong>diesem Beispiel </strong>zeige ich, <strong>wie </strong>man einen <strong>Timer </strong>innerhalb eines &#8222;<strong>Button-Klick</strong>&#8222;-Ereignishandlers <strong>erstellen </strong>kann.</p>



<p><strong>Auch hier </strong>werden wir &#8222;<strong>bekannte Methoden</strong>&#8220; verwenden, <strong>also Methoden</strong>, <strong>die bereits </strong>in der Form <strong>vorhanden </strong>sind.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Private Sub btnCreateTimer_Click(sender As Object, e As EventArgs)
    Dim timer = new Timer()
    timer.Interval = 1000 ' default 100ms
    AddHandler timer.Tick, AddressOf MyTicker
    timer.Start() ' or use Enabled = True if you want to start it immediately
End Sub

Private Sub MyTicker(sender As Object, e As EventArgs)
   System.Diagnostics.Debug.WriteLine("MyTicker")
End Sub</pre>



<h2 class="wp-block-heading">VB.NET Timer zur Laufzeit erstellen – Mit anonymem Handler</h2>



<p>Mit dem <strong>dritten und letzten Beispiel</strong> möchte ich die <strong>Möglichkeit </strong>für einen <strong>sogenannten </strong>&#8222;<strong>anonymen Handler</strong>&#8220; nutzen.</p>



<p><strong>Selbstverständlich </strong>muss man <strong>auch hier</strong> auf die <strong>Signatur</strong>, also in diesem Fall auf die korrekte Anzahl der Parameter der Methode <strong>achten</strong>.</p>



<h3 class="wp-block-heading">Mit anonymer Sub</h3>



<p><strong>Hier </strong>brauchst Du auch <strong>keine AddressOf-Operator</strong> angeben, da wir <strong>nicht </strong>darüber praktisch <strong>an die Adresse der Funktion</strong> kommen müssen.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Private Sub btnCreateTimer_Click(sender As Object, e As EventArgs)
    Dim timer = new Timer()
    timer.Interval = 1000 ' default 100ms
    AddHandler timer.Tick, Sub(sender, e)
                                   Debug.WriteLine("anonymous")
                               End Sub
    timer.Start() ' or use Enabled = True if you want to start it immediately
End Sub</pre>



<h3 class="wp-block-heading">Mit anonymer Sub und Variable</h3>



<p>Du <strong>kannst diesen Handler</strong> <strong>auch </strong>in eine <strong>Variable </strong>stecken <strong>und </strong>dann mit AddHandler <strong>zuweisen</strong>:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Private Sub btnCreateTimer_Click(sender As Object, e As EventArgs)
    Dim timer = new Timer()
    timer.Interval = 1000 ' default 100ms
    Dim dynamicCreatedHandler = Sub(sender, e)
                                    Debug.WriteLine("anonymous")
                                End Sub
    AddHandler Timer.Tick, dynamicCreatedHandler
    timer.Start() ' or use Enabled = True if you want to start it immediately
End Sub</pre>
<p>Der Beitrag <a href="https://robbelroot.de/blog/vb-net-timer-zur-laufzeit-erstellen/">VB.NET Timer zur Laufzeit erstellen</a> erschien zuerst auf <a href="https://robbelroot.de">Robert Skibbe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://robbelroot.de/blog/vb-net-timer-zur-laufzeit-erstellen/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
