<?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>instance Archive - Robert Skibbe</title>
	<atom:link href="https://robbelroot.de/blog/tag/instance/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>alias RobbelRoot – Freelance Full Stack Developer .NET</description>
	<lastBuildDate>Mon, 23 Jan 2023 19:59:42 +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>instance Archive - Robert Skibbe</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>VB.NET Form öffnen</title>
		<link>https://robbelroot.de/blog/vbnet-form-oeffnen/</link>
					<comments>https://robbelroot.de/blog/vbnet-form-oeffnen/#comments</comments>
		
		<dc:creator><![CDATA[Robert Skibbe]]></dc:creator>
		<pubDate>Sat, 03 Jul 2021 01:49:11 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Visual Basic .NET]]></category>
		<category><![CDATA[Visual Basic .NET lernen]]></category>
		<category><![CDATA[anzeigen]]></category>
		<category><![CDATA[darstellen]]></category>
		<category><![CDATA[dialog]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[help]]></category>
		<category><![CDATA[hilfe]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[instance]]></category>
		<category><![CDATA[instanz]]></category>
		<category><![CDATA[öffnen]]></category>
		<category><![CDATA[open]]></category>
		<category><![CDATA[show]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[vb.net]]></category>
		<category><![CDATA[vbnet]]></category>
		<category><![CDATA[zweite form]]></category>
		<guid isPermaLink="false">https://robbelroot.de/?p=2825</guid>

					<description><![CDATA[<p>VB.NET Form öffnen In VB.NET eine Form zu öffnen kann vor allem für Neulinge ziemlich doof laufen, jedoch dazu gleich mehr! Eine zweite Form zu öffnen, oder allgemein eine versteckte Form wieder anzuzeigen gehört glaube ich heute zu den Standards in jeder Anwendung. Wenn Du dir z. B. das konkrete &#8230;</p>
<p>Der Beitrag <a href="https://robbelroot.de/blog/vbnet-form-oeffnen/">VB.NET Form öffnen</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/07/VB.NET-Form-oeffnen.png"><img fetchpriority="high" decoding="async" width="1024" height="536" src="https://robbelroot.de/wp-content/uploads/2021/07/VB.NET-Form-oeffnen-1024x536.png" alt="VB.NET Form öffnen" class="wp-image-2829" title="VB.NET Form öffnen" srcset="https://robbelroot.de/wp-content/uploads/2021/07/VB.NET-Form-oeffnen-1024x536.png 1024w, https://robbelroot.de/wp-content/uploads/2021/07/VB.NET-Form-oeffnen-300x157.png 300w, https://robbelroot.de/wp-content/uploads/2021/07/VB.NET-Form-oeffnen-768x402.png 768w, https://robbelroot.de/wp-content/uploads/2021/07/VB.NET-Form-oeffnen-700x366.png 700w, https://robbelroot.de/wp-content/uploads/2021/07/VB.NET-Form-oeffnen-332x174.png 332w, https://robbelroot.de/wp-content/uploads/2021/07/VB.NET-Form-oeffnen.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">VB.NET Form öffnen</figcaption></figure>






<h2 class="wp-block-heading">VB.NET Form öffnen</h2>



<p>In <strong>VB.NET</strong> eine <strong>Form </strong>zu <strong>öffnen </strong>kann vor allem für Neulinge ziemlich doof laufen, jedoch dazu gleich mehr!</p>



<p><strong>Eine zweite Form </strong>zu <strong>öffnen</strong>, <strong>oder </strong>allgemein eine <strong>versteckte Form wieder anzuzeigen gehört </strong>glaube ich heute <strong>zu </strong>den <strong>Standards </strong>in jeder Anwendung.</p>



<p><strong>Wenn </strong>Du dir <strong>z. B.</strong> das <strong>konkrete Beispiel mit </strong>einer <strong>Adress</strong>&#8211;<strong>Eingabe anschauen </strong>möchtest, <strong>kannst Du</strong> auch <a href="/blog/vbnet-input-dialog/" target="_blank" rel="noreferrer noopener"><strong>in diesen Beitrag hier abtauchen</strong></a>, <strong>allerdings</strong> ist da schon <strong>viel </strong>drum <strong>herum</strong>, <strong>daher </strong>ist <strong>Dieser hier </strong>definitiv <strong>einfacher</strong>.</p>



<h2 class="wp-block-heading">Wie man es nicht machen sollte!</h2>



<p>Bevor wir jedoch in die Richtung &#8222;wie sollte man es machen&#8220; gehen, schauen wir uns erst einmal an, wie man es eben nicht tun sollte! <strong>Viele Codes</strong> die Du online finden wirst, oder schon gefunden hast, <strong>werden</strong> ungefähr <strong>so aussehen</strong> – bitte nicht:</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="">Public Class Form1

    Private Sub btnShowSecondFormWrong_Click(sender As Object, e As EventArgs) Handles btnShowSecondFormWrong.Click
        ' DONT DO THIS!
        Form2.Show()
    End Sub

End Class</pre>



<p>Diese <strong>besonders für Einsteiger einfache Variante</strong>, prägt sich bei vielen .NET Entwicklern am Anfang ihrer Karriere Aufgrund der simplen Handhabung ein.</p>



<p><strong>Später jedoch</strong>, <strong>stoßen </strong>Sie damit irgendwann berechtigterweise <strong>auf Kritik</strong> und eventuellen Problemen, denn <strong>rein logisch </strong>betrachtet: <strong>Wie </strong>willst Du eine Form <strong>anzeigen</strong>, die Du <strong>nie erstellt </strong>hast? In erster Linie ist es also eher ein Verständnis/Logik-Problem des Programmierers.</p>



<p><strong>Lasse diesen Kritiker</strong>, bzw. Besserwisser dieses Mal <strong>mich sein </strong>&#x1f913;, denn <strong>je eher Du </strong>dieses Code-Schnipsel <strong>vergisst</strong>, <strong>desto besser </strong>für Dich und Deine Nerven!</p>



<h3 class="wp-block-heading">C# macht es richtig</h3>



<p>Ein <strong>tolles Vorbild </strong>ist in diesem Beispiel <strong>C#</strong>, <strong>obwohl </strong>sich <strong>viele Funktionalitäten</strong> in den Sprachen <strong>ähneln</strong>, da Sie ja <strong>beide auf </strong>dem <strong>.NET Framework</strong> <strong>basieren</strong>, <strong>gibt </strong>es einige <strong>Unterschiede</strong>.</p>



<p><strong>Unter anderem wird VB.NET</strong> <strong>deswegen </strong>auch so oft harsch <strong>kritisiert</strong>, <strong>aber gut </strong>das <strong>gehört </strong>hier jetzt <strong>nicht </strong>weiter <strong>hin</strong>..</p>



<p><strong>In C#</strong> ist es <strong>zum Beispiel</strong> gar <strong>nicht </strong>erst <strong>möglich </strong>so einen Quatsch wie oben zu machen, <strong>denn </strong>der <strong>C#-Compiler</strong> <strong>fragt </strong>sich, <strong>welches Objekt</strong> er verwenden soll:</p>



<figure class="wp-block-image size-large"><a href="https://robbelroot.de/wp-content/uploads/2021/07/CSharp-Compiler-Fehler-CS0120-benoetigtes-Objekt.png"><img decoding="async" width="747" height="191" src="https://robbelroot.de/wp-content/uploads/2021/07/CSharp-Compiler-Fehler-CS0120-benoetigtes-Objekt.png" alt="CSharp Compiler Fehler CS0120 benötigtes Objekt" class="wp-image-2836" title="CSharp Compiler Fehler CS0120 benötigtes Objekt" srcset="https://robbelroot.de/wp-content/uploads/2021/07/CSharp-Compiler-Fehler-CS0120-benoetigtes-Objekt.png 747w, https://robbelroot.de/wp-content/uploads/2021/07/CSharp-Compiler-Fehler-CS0120-benoetigtes-Objekt-300x77.png 300w, https://robbelroot.de/wp-content/uploads/2021/07/CSharp-Compiler-Fehler-CS0120-benoetigtes-Objekt-700x179.png 700w, https://robbelroot.de/wp-content/uploads/2021/07/CSharp-Compiler-Fehler-CS0120-benoetigtes-Objekt-332x85.png 332w" sizes="(max-width: 747px) 100vw, 747px" /></a><figcaption class="wp-element-caption">CSharp Compiler Fehler CS0120 benötigtes Objekt</figcaption></figure>



<h3 class="wp-block-heading">Warum so in VB.NET möglich?</h3>



<p><strong>Letztendlich </strong>könnte man sich <strong>fragen</strong>, <strong>warum </strong>das Ganze denn dann <strong>möglich </strong>ist, <strong>wenn </strong>es doch so <strong>unsauber </strong>ist.</p>



<p>Die <strong>Antwort liegt bei </strong>der <strong>Altlast </strong>von VB.NET, <strong>bekannt unter </strong>dem Kürzel &#8222;VB6&#8220; und dem <strong>Namen </strong>&#8222;<strong><a href="https://de.wikipedia.org/wiki/Visual_Basic_Classic" target="_blank" rel="noreferrer noopener">Visual Basic Classic</a></strong>&#8222;.</p>



<p>Eine <strong>derartige Herangehensweise funktioniert</strong>, <strong>weil </strong>VB.NET an dieser Stelle <strong>eine implizite Instanz </strong>der Klasse – wenn nötig – <strong>erstellt</strong>.</p>



<h3 class="wp-block-heading">Wieso viele Entwickler es trotzdem tun &#x1f612;</h3>



<p><strong>Immer wieder </strong>habe ich <strong>in Vergangenheit beobachtet</strong>, <strong>wie </strong>einige meiner <strong>Schüler</strong>, <strong>aber auch Entwickler </strong>aus <strong>Unternehmen</strong>, mit denen ich <strong>kooperiert </strong>habe, es <strong>trotzdem weiterhin </strong>so <strong>gemacht </strong>haben.</p>



<p><strong>Was bei Schülern</strong>, sprich <strong>am Anfang stehenden Entwicklern</strong>, meiner Meinung nach <strong>noch entschuldigt </strong>werden kann, <strong>sieht bei angestellten </strong>Entwicklern denke ich <strong>anders aus</strong>.</p>



<p><strong>Besonders </strong>aus<strong> VB6 </strong>kommenden &#8222;<strong>Entwicklern</strong>&#8220; <strong>schwören </strong>häufig <strong>nicht von </strong>dieser <strong>Methode ab</strong>, <strong>da </strong>Sie ja <strong>so einfach </strong>ist und &#8222;..es <strong>hat ja </strong>schließlich immer <strong>funktioniert</strong>&#8222;..</p>



<h2 class="wp-block-heading">Code – VB.NET Form öffnen aber richtig!</h2>



<p><strong>Wer sich </strong>verständlicherweise nun <strong>fragt</strong>: &#8222;Nunja, <strong>wie öffne ich </strong>denn dann eine <strong>neue Form </strong>in <strong>VB.NET</strong>?&#8220;, <strong>oder </strong>&#8222;<strong>Wie zeige </strong>ich eine <strong>versteckte Form </strong>in VB.NET an?&#8220;, <strong>wird hier </strong>nun <strong>fündig</strong>.</p>



<p><strong>Da </strong>es <strong>sich </strong>bei <strong>VB.NET</strong> um eine <strong>objektorientierte Sprache</strong> handelt, in der man natürlich <strong>meistens mit </strong>irgendwelchen <strong>Objekten </strong>– vorzugsweise <strong>Instanzen von Klassen</strong> – arbeitet, <strong>sieht </strong>es <strong>auch bei </strong>den <strong>Formen nicht anders </strong>aus.</p>



<p><strong>Letztendlich </strong>muss man <strong>nur </strong>eine <strong>Instanz </strong>einer Form <strong>erstellen </strong>und <strong>anschließend </strong>deren <strong><a href="https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.form.show?view=net-5.0" target="_blank" rel="noreferrer noopener">Show</a></strong>-, bzw. <strong><a href="https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.form.showdialog?view=net-5.0" target="_blank" rel="noreferrer noopener">ShowDialog</a></strong>-Methode aufrufen.</p>



<h3 class="wp-block-heading">VB.NET Form öffnen</h3>



<p>Wir <strong>nehmen </strong>also unser <strong>kleines Beispiel von vorhin</strong> <strong>und bauen es </strong>fix wie folgt <strong>um</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="">Public Class Form1

    Private Sub btnShowSecondForm_Click(sender As Object, e As EventArgs) Handles btnShowSecondForm.Click
        Dim instance = New Form2()
        instance.Show()
    End Sub

End Class</pre>



<h3 class="wp-block-heading">Achtung – Offene Formen</h3>



<p><strong>Beachte </strong>jedoch, <strong>dass bei mehreren Klicks</strong>, dementsprechend <strong>mehrere und </strong>somit <strong>unabhängige Instanzen </strong>der Form <strong>geöffnet werden</strong>.</p>



<p><strong>Wenn </strong>Du <strong>Diese dann </strong>im zweiten Formular mit dem &#8222;Hide&#8220;-Button <strong>versteckst</strong>, <strong>bleiben Diese </strong>dennoch im Hintergrund <strong>offen</strong> – die Formen <strong>verbrauchen also Ressourcen </strong>im Hintergrund!</p>



<p><strong>Um </strong>das <strong>Problem </strong>genauer <strong>darzustellen</strong>, <strong>habe ich </strong>Dir eine <strong><a href="https://docs.microsoft.com/de-de/dotnet/api/system.diagnostics.debug.writeline?view=net-5.0" target="_blank" rel="noreferrer noopener">Debug.WriteLine</a></strong>-Zeile <strong>eingebaut</strong>, die dies anzeigt.</p>



<p>Ich <strong>denke dort liegt auch</strong> das <strong>hauptsächliche Problem </strong>von vielen Entwicklern, <strong>also das </strong>der <strong>jeweilige Entwickler noch nicht </strong>so <strong>weit </strong>ist und <strong>nicht mit </strong>dem ganzen <strong>Umfang </strong>der Materie <strong>klarkommt</strong>.</p>



<p>Damit <strong>meine ich </strong>die <strong>korrekte Arbeit mit </strong>verschiedenen <strong>Instanzen </strong>und das <strong>jede </strong>dieser Instanzen auch <strong>eigene Events </strong>auslösen kann, <strong>verwaltet werden </strong>möchte und auch <strong>eigene</strong> <strong>Gültigkeitsbereiche</strong> hat.</p>



<p><strong>Man muss </strong>hier also darauf <strong>achten</strong>, <strong>dass Formen auch </strong>bei <strong>Bedarf </strong>wieder <strong>sauber geschlossen </strong>werden und <strong>nicht </strong>wie gezeigt <strong>im Hintergrund </strong>vor sich hin <strong>dümpeln</strong>.</p>



<h3 class="wp-block-heading">Zweites Beispiel – Mit Zwischenspeicher</h3>



<p><strong>In diesem Teil</strong> zeige ich Dir, <strong>wie </strong>Du die <strong>Form nach Erstellung </strong>in einer formularweiten Variable/Eigenschaft <strong>cachen </strong>– also praktisch <strong>zwischenspeichern </strong>– <strong>kannst</strong>.</p>



<p>Das <strong>ermöglicht </strong>dir den <strong>späteren Zugriff </strong>auf die Form, z. B. wie im Sample <strong>durch weitere Buttons</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="">Public Class Form1

    Public WithEvents CachedInstance As Form2

    Private Sub btnShowFormAndCache_Click(sender As Object, e As EventArgs) Handles btnShowFormAndCache.Click
        CachedInstance = New Form2()
        CachedInstance.Show()
    End Sub

    Private Sub btnShowCachedForm_Click(sender As Object, e As EventArgs) Handles btnShowCachedForm.Click
        If CachedInstance IsNot Nothing Then
            CachedInstance.Show()
        End If
    End Sub

    Private Sub btnHideCachedForm_Click(sender As Object, e As EventArgs) Handles btnHideCachedForm.Click
        If CachedInstance IsNot Nothing Then
            CachedInstance.Hide()
        End If
    End Sub

    Private Sub btnCloseCachedForm_Click(sender As Object, e As EventArgs) Handles btnCloseCachedForm.Click
        If CachedInstance IsNot Nothing Then
            CachedInstance.Close()
        End If
    End Sub

End Class</pre>



<h2 class="wp-block-heading">Kompletter Code – VB.NET Form öffnen</h2>



<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="">Public Class Form1

    Private Sub btnShowSecondFormWrong_Click(sender As Object, e As EventArgs) Handles btnShowSecondFormWrong.Click
        Form2.Show()
    End Sub

    Private Sub btnShowSecondForm_Click(sender As Object, e As EventArgs) Handles btnShowSecondForm.Click
        Dim instance = New Form2()
        instance.Show()
    End Sub


    Public WithEvents CachedInstance As Form2

    Private Sub btnShowFormAndCache_Click(sender As Object, e As EventArgs) Handles btnShowFormAndCache.Click
        CachedInstance = New Form2()
        CachedInstance.Show()
    End Sub

    Private Sub btnShowCachedForm_Click(sender As Object, e As EventArgs) Handles btnShowCachedForm.Click
        If CachedInstance IsNot Nothing Then
            CachedInstance.Show()
        End If
    End Sub
    Private Sub btnHideCachedForm_Click(sender As Object, e As EventArgs) Handles btnHideCachedForm.Click
        If CachedInstance IsNot Nothing Then
            CachedInstance.Hide()
        End If
    End Sub

    Private Sub btnCloseCachedForm_Click(sender As Object, e As EventArgs) Handles btnCloseCachedForm.Click
        If CachedInstance IsNot Nothing Then
            CachedInstance.Close()
        End If
    End Sub

End Class

Public Class Form2

    Private Sub btnHide_Click(sender As Object, e As EventArgs) Handles btnHide.Click
        Hide()
        Debug.WriteLine(Application.OpenForms.Count, "Open")
    End Sub

    Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
        Close()
    End Sub

End Class</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 wp-element-button" href="/downloads/vbnet/OpenFormExample.zip" target="_blank" rel="noreferrer noopener">OpenFormExample.zip</a></div>
</div>
<p>Der Beitrag <a href="https://robbelroot.de/blog/vbnet-form-oeffnen/">VB.NET Form öffnen</a> erschien zuerst auf <a href="https://robbelroot.de">Robert Skibbe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://robbelroot.de/blog/vbnet-form-oeffnen/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
	</channel>
</rss>
