{"id":55000364,"date":"2023-04-01T00:00:00","date_gmt":"2023-04-25T16:57:41","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=364"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"QRCodes_per_NETAnwendung_erstellen","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/QRCodes_per_NETAnwendung_erstellen\/","title":{"rendered":"QR-Codes per .NET-Anwendung erstellen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/b9a7e2a2d31044c58bad78635e60c921\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>QR-Codes sind praktische Helfer in der heutigen Zeit der Smartphones und ihren Kameras. Man kann damit wichtige Informationen so codieren, dass man diese mit der Kamera erkennen und weiterverarbeiten kann &#8211; standardm&auml;&szlig;ig so, dass der Code eine URL zu einer Webseite erh&auml;lt und man diese dann im Browser des Smartphones aufrufen und die Inhalte konsumieren kann. Dieser Artikel zeigt, wie Du QR-Codes mit .NET-Anwendung erstellen kannst. Dreh- und Angelpunkt ist dabei ein NuGet-Paket, das die Funktionen f&uuml;r die Erstellung von QR-Codes auf Basis verschiedener Informationen bereitstellt. Der Artikel zeigt, wie wir dieses Paket in ein .NET-Projekt einbinden und es dann nutzen k&ouml;nnen.<\/b><\/p>\n<h2>QR-Codes und ihre Anwendung<\/h2>\n<p>Kennst Du eigentlich die Bedeutung der Abk&uuml;rzung QR? Ich habe sie lustigerweise zum ersten Mal bewusst wahrgenommen, als ich f&uuml;r diesen Artikel recherchiert habe. QR steht f&uuml;r Quick Response.<\/p>\n<p>F&uuml;r QR-Codes gibt es mittlerweile sehr viele Anwendungsf&auml;lle. Hier sind nur einige von ihnen:<\/p>\n<ul>\n<li>Produktinformationen: QR-Codes k&ouml;nnen auf Produktverpackungen platziert werden, um Kunden schnell und einfach auf weitere Informationen wie Produktbeschreibungen, Kundenbewertungen oder Anleitungen zu verweisen.<\/li>\n<li>Marketing und Werbung: QR-Codes k&ouml;nnen in Marketing- und Werbekampagnen eingesetzt werden, um Kunden auf spezielle Angebote, Wettbewerbe oder Veranstaltungen aufmerksam zu machen. Sie k&ouml;nnen auch verwendet werden, um Kunden auf eine Landingpage oder eine mobile App zu leiten.<\/li>\n<li>Eventmanagement: QR-Codes k&ouml;nnen auf Eintrittskarten oder Veranstaltungsbrosch&uuml;ren platziert werden, um Besuchern den Zugang zu zus&auml;tzlichen Informationen, Updates und Planungstools zu erm&ouml;glichen.<\/li>\n<li>Mobile Zahlungen: QR-Codes k&ouml;nnen als Zahlungsoption f&uuml;r mobile Zahlungsanwendungen verschiedener Banken verwendet werden.<\/li>\n<li>Identifikation und Authentifizierung: QR-Codes k&ouml;nnen f&uuml;r die Identifikation von Personen oder als Best&auml;tigung f&uuml;r den Zugang zu bestimmten Orten oder Veranstaltungen verwendet werden.<\/li>\n<li>Gesundheitswesen: QR-Codes k&ouml;nnen f&uuml;r die schnelle &Uuml;bertragung von Patientendaten und medizinischen Informationen verwendet werden.<\/li>\n<li>Tourismus und Reisen: QR-Codes k&ouml;nnen f&uuml;r die Bereitstellung von Informationen zu touristischen Attraktionen, Transportm&ouml;glichkeiten und Unterk&uuml;nften verwendet werden.<\/li>\n<\/ul>\n<h2>QR-Codes in .NET<\/h2>\n<p>Im Beispiel wollen wir eine WPF-Anwendung nutzen, um Texte eingeben und daraus QR-Codes zu erzeugen.<\/p>\n<p>Dazu erstellen wir eine neue Anwendung auf Basis der Vorlage <b>WPF-App (.NET Framework) <\/b>&#8211; siehe Bild 1.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_364_001.png\" alt=\"Erstellen eines WPF-Projekts\" width=\"649,627\" height=\"360,9037\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Erstellen eines WPF-Projekts<\/span><\/b><\/p>\n<p>Nach dem Erstellen des Projekts erscheint das Hauptfenster von Visual Studio .NET und zeigt die WPF-Seite im Entwurf und mit dem Beschreibungscode im XAML-Format an. Diese Seite wird nach dem Starten der Anwendung angezeigt. Deshalb platzieren wir hier die Steuerelemente f&uuml;r die Daten, auf deren Basis der QR-Code erzeugt wird.<\/p>\n<p>Hier passen wir den Code im unteren Bereich so an, dass wir sp&auml;ter den Entwurf aus Bild 2 erhalten.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_364_002.png\" alt=\"Unsere angehende L&ouml;sung im WPF-Entwurf\" width=\"649,627\" height=\"667,2795\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Unsere angehende L&ouml;sung im WPF-Entwurf<\/span><\/b><\/p>\n<p>Dazu verwenden wir den Code aus Listing 1. Im oberen Teil passen wir gegen&uuml;ber der Vorlage die H&ouml;he und die Breite des <b>Window<\/b>-Elements so an, dass die Eigenschaften <b>Height <\/b>und <b>Width <\/b>jeweils den Wert <b>550 <\/b>erhalten.<\/p>\n<pre>&lt;Window x:Class=\"MainWindow\" ... Title=\"MainWindow\" Height=\"550\" Width=\"550\"&gt;\r\n     &lt;Grid&gt;\r\n         &lt;Grid.ColumnDefinitions&gt;\r\n             &lt;ColumnDefinition Width=\"Auto\"&gt;&lt;\/ColumnDefinition&gt;\r\n             &lt;ColumnDefinition Width=\"Auto\"&gt;&lt;\/ColumnDefinition&gt;\r\n             &lt;ColumnDefinition Width=\"*\"&gt;&lt;\/ColumnDefinition&gt;\r\n         &lt;\/Grid.ColumnDefinitions&gt;\r\n         &lt;Grid.RowDefinitions&gt;\r\n             &lt;RowDefinition Height=\"Auto\"&gt;&lt;\/RowDefinition&gt;\r\n             &lt;RowDefinition Height=\"Auto\"&gt;&lt;\/RowDefinition&gt;\r\n             &lt;RowDefinition Height=\"Auto\"&gt;&lt;\/RowDefinition&gt;\r\n             &lt;RowDefinition Height=\"*\"&gt;&lt;\/RowDefinition&gt;\r\n         &lt;\/Grid.RowDefinitions&gt;\r\n         &lt;Label&gt;Text f&uuml;r den QR-Code:&lt;\/Label&gt;\r\n         &lt;TextBox x:Name=\"txtQRCode\" Grid.Column=\"1\" Width=\"400\" Height=\"100\" Margin=\"5\" TextWrapping=\"Wrap\" &gt;&lt;\/TextBox&gt;\r\n         &lt;Button x:Name=\"btnQRCodeErstellen\" Grid.Column=\"1\" Grid.Row=\"1\" Width=\"120\" Height=\"30\" Margin=\"5\" \r\n             HorizontalAlignment=\"Left\"&gt;QR-Code erstellen&lt;\/Button&gt;\r\n         &lt;Label Grid.Row=\"2\"&gt;QR-Code:&lt;\/Label&gt;\r\n         &lt;Border BorderThickness=\"1\" BorderBrush=\"DarkGray\" Grid.Column=\"1\" Grid.Row=\"2\" Margin=\"5\" Width=\"300\" \r\n                 Height=\"300\" HorizontalAlignment=\"Left\"&gt;\r\n             &lt;Image x:Name=\"imgQRCode\" Margin=\"5\" Stretch=\"Fill\"&gt;&lt;\/Image&gt;\r\n         &lt;\/Border&gt;\r\n     &lt;\/Grid&gt;\r\n&lt;\/Window&gt;<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Code f&uuml;r die Gestaltung des Fensters und der enthaltenen Steuerelemente<\/span><\/b><\/p>\n<p>F&uuml;r das darunter liegende <b>Grid<\/b>-Element legen wir ein Raster fest, das aus drei Spalten und vier Zeilen besteht.<\/p>\n<p>Das erledigen wir f&uuml;r die Spalten mit dem Element <b>Grid.ColumnDefinitions<\/b>, dem wir drei <b>ColumnDefinition<\/b>-Elemente unterordnen, die jeweils die Breite der Spalten angeben &#8211; die ersten beiden sollen an die enthaltenen Steuerelemente angepasst werden (<b>Width=&#8221;Auto&#8221;<\/b>), die letzte die restliche Breite im Fenster einnehmen (<b>Width=&#8221;*&#8221;<\/b>).<\/p>\n<p>F&uuml;r die Zeilen verfahren wir analog und legen im <b>Grid.RowDefinitions <\/b>vier <b>RowDefinition<\/b>-Elemente fest.<\/p>\n<p>Diese Zeilen und Spalten geben wir mit den Eigenschaften <b>Grid.Column <\/b>und <b>Grid.Row <\/b>der nachfolgend hinzugef&uuml;gten Steuerelemente so an, dass festgelegt ist, welches Steuerelement in welcher Zelle landet.<\/p>\n<p>F&uuml;r das erste <b>Label<\/b>-Element fehlen diese beiden Eigenschaften, da wir hier den Standardwert <b>0 <\/b>verwenden, damit das Bezeichnungsfeld in der linken, oberen Spalte landet. Die nachfolgend definierte <b>TextBox <\/b>soll in der zweiten Spalte der ersten Zeile landen, daher stellen wir hier <b>Grid.Column <\/b>auf den Wert <b>1<\/b> ein (der Index f&uuml;r die Zeilen und Spalten ist 0-basiert). F&uuml;r die Textbox stellen wir eine entsprechende H&ouml;he und Breite und einen Abstand zum umgebenden Grid ein. Au&szlig;erdem legen wir mit <b>TextWrapping=&#8221;Wrap&#8221; <\/b>fest, dass wir mehrzeilige Texte eingeben k&ouml;nnen. Der Name des Textfeldes ist <b>txtQRCodeErstellen<\/b>.<\/p>\n<p>Die n&auml;chste Zeile enth&auml;lt in der zweiten Spalte eine Schaltfl&auml;che namens <b>btnQRCodeErstellen<\/b>. Die dadurch aufzurufende Prozedur definieren wir gleich.<\/p>\n<p>Darunter zeigen wir ein <b>Image<\/b>-Steuerelement an, welches den erzeugten QR-Code schlie&szlig;lich anzeigen soll. Dieses Element nennen wir <b>imgQRCode<\/b>.<\/p>\n<p>Damit man es &uuml;berhaupt sieht, haben wir um dieses Element herum noch ein <b>Border<\/b>-Element mit der Dicke <b>1 <\/b>und der Farbe <b>DarkGray <\/b>gelegt.<\/p>\n<h2>Ereignisprozedur hinzuf&uuml;gen<\/h2>\n<p>Damit wir beim Anklicken der Schaltfl&auml;che eine Prozedur ausf&uuml;hren k&ouml;nnen, stellen wir f&uuml;r diese das Attribut <b>Click <\/b>ein.<\/p>\n<p>Um die Prozedur schnellstm&ouml;glich anzulegen und bearbeiten zu k&ouml;nnen, geben wir nach dem Attribut <b>Click <\/b>ein Gleichheitszeichen ein, woraufhin der IntelliSense-Eintrag <b><Neuer Ereignishandler><\/b> auftaucht (siehe Bild 3). Bet&auml;tigen wir nun die Tabulatur-Taste, wird automatisch der Name der Ereignisprozedur eingetragen:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_364_003.png\" alt=\"Anlegen des Ereignishandlers\" width=\"649,627\" height=\"255,5087\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Anlegen des Ereignishandlers<\/span><\/b><\/p>\n<pre>Click=\"btnQRCodeErstellen_Click\"<\/pre>\n<p>Au&szlig;erdem finden wir durch das anschlie&szlig;ende Bet&auml;tigen der Taste <b>F12 <\/b>(w&auml;hrend sich die Einf&uuml;gemarke auf dem Attribut befindet) die neu angelegte Prozedur im Codefenster des Klassenmoduls des WPF-Fensters vor (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_364_005.png\" alt=\"Der neue Ereignishandler\" width=\"599,6265\" height=\"179,888\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Der neue Ereignishandler<\/span><\/b><\/p>\n<p>Damit kann der eigentliche Spa&szlig; beginnen!<\/p>\n<h2>Hinzuf&uuml;gen einer Bibliothek mit QR-Code-Funktionen<\/h2>\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\/55000364\/\">\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\/55000364?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\/55000364\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"e5d0bba7c3\"\/>\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>QR-Codes sind praktische Helfer in der heutigen Zeit der Smartphones und ihren Kameras. Man kann damit wichtige Informationen so codieren, dass man diese mit der Kamera erkennen und weiterverarbeiten kann &#8211; standardm&auml;&szlig;ig so, dass der Code eine URL zu einer Webseite erh&auml;lt und man diese dann im Browser des Smartphones aufrufen und die Inhalte konsumieren kann. Dieser Artikel zeigt, wie Du QR-Codes mit .NET-Anwendung erstellen kannst. Dreh- und Angelpunkt ist dabei ein NuGet-Paket, das die Funktionen f&uuml;r die Erstellung von QR-Codes auf Basis verschiedener Informationen bereitstellt. Der Artikel zeigt, wie wir dieses Paket in ein .NET-Projekt einbinden und es dann nutzen k&ouml;nnen.<\/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],"tags":[],"yst_prominent_words":[],"class_list":["post-55000364","post","type-post","status-publish","format-standard","hentry","category-66022023","category-662023","category-VBNETProgrammierung"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000364","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=55000364"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000364\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000364"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000364"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000364"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}