{"id":55000358,"date":"2023-04-01T00:00:00","date_gmt":"2023-04-25T13:40:27","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=358"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"StandaloneApps_mit_NET_programmieren","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/StandaloneApps_mit_NET_programmieren\/","title":{"rendered":"Standalone-Apps mit .NET programmieren"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/a5de19b4beeb4b75888f8f80df3ffc7e\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Nicht immer m&ouml;chte man Erweiterungen gezielt f&uuml;r eine Office-Anwendung programmieren. Gelegentlich fallen Aufgaben an, die man zwar mit einer der Office-Anwendungen erledigen k&ouml;nnte, aber dazu ben&ouml;tigt man auch immer die jeweilige Office-Anwendung und ein passendes Dokument wie ein Excel-Workbook oder eine Access-Datenbank. Und gerade bei Access ist eine der meist gestellten Fragen: Wie kann ich die Datenbank in eine .exe-Datei umwandeln? Die Antwort lautet: Gar nicht. Wenn es aber allein darum geht, Aufgaben zu erledigen, die nicht unbedingt mit Office zusammenh&auml;ngen, dann k&ouml;nnte man auch schnell eine .NET-App programmieren. Die hat den Vorteil, dass man erstens viel mehr Steuerelemente nutzen kann, zweitens viel mehr Bibliotheken zur Verf&uuml;gung hat und drittens eine .exe erstellen kann, die man sogar noch weitergeben kann. In diesem Artikel schauen wir uns die Grundlagen f&uuml;r die Erstellung einer einfachen .exe-Datei mit .NET an.<\/p>\n<p><b>Video passend zu diesem Artikel:<\/b><\/p>\n<div class=\"BorlabsCookie _brlbs-cb-youtube\"><div class=\"_brlbs-content-blocker\"> <div class=\"_brlbs-embed _brlbs-video-youtube\"> <img class=\"_brlbs-thumbnail\" src=\"https:\/\/vbentwickler.de\/wp-content\/plugins\/borlabs-cookie\/assets\/images\/cb-no-thumbnail.png\" alt=\"YouTube\"> <div class=\"_brlbs-caption\"> <p>Mit dem Laden des Videos akzeptieren Sie die Datenschutzerkl\u00e4rung von YouTube.<br><a href=\"https:\/\/policies.google.com\/privacy\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Mehr erfahren<\/a><\/p> <p><a class=\"_brlbs-btn _brlbs-icon-play-white\" href=\"#\" data-borlabs-cookie-unblock role=\"button\">Video laden<\/a><\/p> <p><label><input type=\"checkbox\" name=\"unblockAll\" value=\"1\" checked> <small>YouTube immer entsperren<\/small><\/label><\/p> <\/div> <\/div> <\/div><div class=\"borlabs-hide\" data-borlabs-cookie-type=\"content-blocker\" data-borlabs-cookie-id=\"youtube\"><script type=\"text\/template\">PHA+PGlmcmFtZSBsb2FkaW5nPSJsYXp5IiB3aWR0aD0iNTYwIiBoZWlnaHQ9IjMxNSIgc3JjPSJodHRwczovL3d3dy55b3V0dWJlLW5vY29va2llLmNvbS9lbWJlZC9oU2ZHSW91eGJBZyIgdGl0bGU9IllvdVR1YmUgdmlkZW8gcGxheWVyIiBmcmFtZWJvcmRlcj0iMCIgYWxsb3c9ImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBjbGlwYm9hcmQtd3JpdGU7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmU7IHdlYi1zaGFyZSIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPg==<\/script><\/div><\/div><\/b><\/p>\n<h2>Aufgaben f&uuml;r eine .NET-App<\/h2>\n<p>Aufgaben f&uuml;r solche Anwendungen gibt es wie Sand am Meer. Damit der Aufwand zum Erstellen einer solchen Anwendung gerechtfertigt ist, sollte die Aufgabe nicht nur einmal vorkommen, sonst k&ouml;nnte man diese auch von Hand erledigen. Es sollte sich also um eine Aufgabe handeln, die entweder sehr umfangreich ist und dennoch sich wiederholende Schritte enth&auml;lt oder eine, die man regelm&auml;&szlig;ig erledigen muss und f&uuml;r die man die Anwendung immer wieder nutzen kann.<\/p>\n<p>Hier sind ein paar Beispiele:<\/p>\n<ul>\n<li>Dokumente umbenennen und kopieren oder verschieben, zum Beispiel um regelm&auml;&szlig;ige Eing&auml;nge in den Download-Ordner in andere Ordner zu &uuml;bertragen<\/li>\n<li>E-Mails von Outlook auslesen und in bestimmten Verzeichnissen speichern<\/li>\n<li>Seiten aus PDF-Dokumenten extrahieren oder zu neuen Dokumenten zusammensetzen &#8211; Beispiel siehe <b>PDFs aufteilen und zusammenf&uuml;gen mit .NET <\/b>(<b>www.vbentwickler.de\/356<\/b>)<\/li>\n<li>PDF-Dokumente analysieren (Beispiel siehe <b>PDF-Dokumente analysieren mit VB.NET <\/b>(<b>www.vbentwickler.de\/357<\/b>)<\/li>\n<li>Alle m&ouml;glichen Aufgaben, die mit dem Abrufen oder Hochladen von Daten an REST APIs beziehungsweise Webservices zu tun haben &#8211; .NET bietet hier f&uuml;r alle m&ouml;glichen Dienste Bibliotheken in sogenannten NuGet-Paketen an<\/li>\n<li>Daten aus verschiedenen Quellen einlesen und weiterverarbeiten<\/li>\n<li>Automation von Abl&auml;ufen wie Sichern von Dateien, Senden von E-Mails oder Ausf&uuml;hren von Skripten<\/li>\n<\/ul>\n<p>Dir fallen sicher noch weitere Anwendungsf&auml;lle ein. Diese kannst Du gern als Thema f&uuml;r weitere Artikel vorschlagen &#8211; schreibe dazu einfach eine E-Mail an <b>andre@minhorst.com<\/b>.<\/p>\n<h2>Werkzeuge<\/h2>\n<p>Wir stellen in diesem Artikel die Vorgehensweise und einige Grundlagen zum Erstellen von <b>.exe<\/b>-Programmen mit Benutzeroberfl&auml;che vor. Die Benutzeroberfl&auml;che erstellen wir mit WPF. Als Programmiersprache verwenden wir Visual Basic in der .NET-Variante.<\/p>\n<h2>Neues Projekt erstellen<\/h2>\n<p>Um ein f&uuml;r unsere Anforderungen geeignetes Projekt zu erstellen, rufen wir in Visual Studio den Men&uuml;befehl <b>Datei|Neu|Projekt&#8230; <\/b>auf. Im nun folgenden Dialog <b>Neues Projekt erstellen <\/b>k&ouml;nnen wir mit den Auswahlfeldern die Projekttypen einschr&auml;nken. Wir wollen uns auf Visual Basic als Sprache, Windows als Betriebssystem und Desktop als Ziel konzentrieren und finden dann in der Liste den Eintrag <b>WPF-Anwendung &#8211; Ein Projekt zum Erstellen einer .NET Core-WPF-Anwendung<\/b> (siehe Bild 1). Es gibt auch noch den Typ <b>WPF-App (.NET Framework)<\/b>. Die Unterschiede liegen im Wesentlichen darin, dass die .NET-Core-Variante moderner ist und grunds&auml;tzlich plattform&uuml;bergreifend genutzt werden kann. Wie es bei moderneren Versionen &uuml;blich ist, findet man jedoch nicht alle Bibliotheken, die auch f&uuml;r &auml;ltere Projektvorlagen verf&uuml;gbar sind. Da wir aktuell nur Beispiele f&uuml;r die Windows-Plattform programmieren wollen, reicht also der Typ <b>WPF-App (.NET Framework) <\/b>aus &#8211; daher verwenden wir diesen Typ.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_358_001.png\" alt=\"Erstellen eines neuen Projekts in Visual Studio\" width=\"700\" height=\"258,573\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Erstellen eines neuen Projekts in Visual Studio<\/span><\/b><\/p>\n<p>Dass Microsoft diesen Projekttyp nicht mehr weiterentwickelt, sollte man ebenfalls ber&uuml;cksichtigen. Hier spielt der Zeitfaktor eine Rolle: Wenn das Tool nur &uuml;ber einen begrenzten Zeitraum eingesetzt werden soll, kann man f&uuml;r das .NET Framework programmieren. Wenn die Anwendung jedoch etwas zukunftssicherer sein soll, ist die Programmierung f&uuml;r .NET Core sinnvoller.<\/p>\n<h2>Projekt konfigurieren<\/h2>\n<p>Der folgende Schritt zeigt die wesentlichen Merkmale des Projekts an, die f&uuml;r die Erstellung n&ouml;tig sind (siehe Bild 2). Hier geben wir zuerst einen Projektnamen an, in diesem Fall schlicht Beispiel-App. Unter <b>Ort <\/b>legen wir das Verzeichnis fest, in dem die Projektdateien gespeichert werden sollen. In der Regel ben&ouml;tigen wir eine neue Projektmappe, weshalb wir diese Einstellung beibehalten. Es kann sein, dass wir zwei oder mehr Projekte in einer Projektmappe verwalten wollen, dann w&uuml;rden wir hier den Wert <b>Hinzuf&uuml;gen <\/b>w&auml;hlen. Falls wir eine Projektmappe anlegen wollen, geben wir f&uuml;r diese auch einen Namen an. Da wir in den meisten F&auml;llen ein Projekt in einer Projektmappe verwalten, verwenden wir den gleichen Namen wie f&uuml;r das Projekt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_358_002.png\" alt=\"Eingabe der Projekteigenschaften\" width=\"649,627\" height=\"589,1085\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Eingabe der Projekteigenschaften<\/span><\/b><\/p>\n<p>Beim Typ <b>WPF-App (.NET Framework) <\/b>w&auml;hlen wir im letzten Schritt noch das gew&uuml;nschte Zielframework aus &#8211; das ist beim Erstellen eines Projekts f&uuml;r .NET Core nicht n&ouml;tig. Hier ist die Auswahl der aktuellsten Version sinnvoll, es sei denn, der Zielrechner verwendet ein &auml;lteres Framework und kann nicht aktualisiert werden.<\/p>\n<h2>Grundelemente von Visual Studio, die wir kennen m&uuml;ssen<\/h2>\n<p>Danach erscheint Visual Studio mit einigen Elementen (siehe Bild 3). Bei einem WPF-Projekt geh&ouml;rt dazu immer ein erstes WPF-Fenster namens <b>MainWindow.xaml<\/b>. Dieses stellt, wenn wir die Anwendung nun starten w&uuml;rden, die Benutzeroberfl&auml;che der Anwendung. Hier k&ouml;nnen wir Steuerelemente anlegen, diese mit Inhalten versehen und Methoden f&uuml;r die verschiedenen Ereignisse definieren. Letzteres erledigen wir im sogenannten Code behind-Modul, dass prinzipiell wie ein Klassenmodul f&uuml;r ein Access-Formular betrachtet werden kann. Es nimmt den Code auf, der direkt durch die Ereignisse des Fensters oder seines Steuerelemente aufgerufen wird.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_358_003.png\" alt=\"Die Elemente von Visual Studio\" width=\"700\" height=\"456,8979\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Die Elemente von Visual Studio<\/span><\/b><\/p>\n<p>Das Element <b>MainWindow.xaml<\/b> ist standardm&auml;&szlig;ig nach dem Erstellen ge&ouml;ffnet und enth&auml;lt zwei Bereiche:<\/p>\n<ul>\n<li>Im oberen Bereich sehen wir den Entwurf der Benutzeroberfl&auml;che.<\/li>\n<li>Im unteren Bereich sehen wir den Code, der diese Benutzeroberfl&auml;che definiert.<\/li>\n<\/ul>\n<p>Die beiden Bereiche aktualisieren sich gegenseitig &#8211; wenn Du ein Steuerelement aus der Toolbox hinzuf&uuml;gst, wird daf&uuml;r ein entsprechender Eintrag im unteren Bereich angelegt. Und wenn Du per Code ein Steuerelement hinzuf&uuml;gst oder seine Eigenschaften &auml;nderst, wirken sich diese &Auml;nderungen direkt auf den Entwurf der Benutzeroberfl&auml;che aus.<\/p>\n<p>Nicht sichtbar ist hier der Code, der durch die Elemente der Benutzeroberfl&auml;che ausgel&ouml;st wird. Diesen blenden wir &uuml;ber den Projektmappen-Explorer ein. Dieser wird standardm&auml;&szlig;ig im rechten Bereich angezeigt und listet die bisherigen Elemente der Projektmappe und des Projekts auf. Das f&uuml;r uns aktuell wichtigste Element ist <b>MainWindow.xaml<\/b>. Um den Code zu diesem Element anzuzeigen, klicken wir auf den nach rechts zeigenden Pfeil links von diesem Eintrag und erweitern die Anzeige damit so, dass nun ein weiteres Element namens <b>MainWindow.xaml.vb <\/b>erscheint. Mit einem Doppelklick auf diesen Eintrag zeigen wir das Codefenster mit dem Code behind-Modul an, das aktuell nur das Element zur Definition der Klasse enth&auml;lt (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_358_004.png\" alt=\"Das noch recht leere Code behind-Modul\" width=\"424,6267\" height=\"149,4607\" \/><\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000358\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000358?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000358\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"9cc095fa2e\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nicht immer m&ouml;chte man Erweiterungen gezielt f&uuml;r eine Office-Anwendung programmieren. Gelegentlich fallen Aufgaben an, die man zwar mit einer der Office-Anwendungen erledigen k&ouml;nnte, aber dazu ben&ouml;tigt man auch immer die jeweilige Office-Anwendung und eine passendes Dokument wie ein Excel-Workbook oder eine Access-Datenbank. Und gerade bei Access ist eine der meist gestellten Fragen: Wie kann ich die Datenbank in eine .exe-Datei umwandeln? Die Antwort lautet: Gar nicht. Wenn es aber allein darum geht, Aufgaben zu erledigen, die nicht unbedingt mit Office zusammenh&auml;ngen, dann k&ouml;nnte man auch schnell eine .NET-App programmieren. Die hat den Vorteil, dass man erstens viel mehr Steuerelemente nutzen kann, zweitens viel mehr Bibliotheken zur Verf&uuml;gung hat und drittens eine .exe erstellen kann, die man sogar noch weitergeben kann. In diesem Artikel schauen wir uns die Grundlagen f&uuml;r die Erstellung einer einfachen .exe-Datei mit .NET an.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66022023,662023,44000032,44000025],"tags":[],"yst_prominent_words":[],"class_list":["post-55000358","post","type-post","status-publish","format-standard","hentry","category-66022023","category-662023","category-VBNETProgrammierung","category-VBAProgrammierung"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000358","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000358"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000358\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000358"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000358"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000358"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000358"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}