{"id":55000359,"date":"2023-04-01T00:00:00","date_gmt":"2023-04-25T16:20:40","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=359"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Anwendungsdaten_speichern_per_VBNET","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Anwendungsdaten_speichern_per_VBNET\/","title":{"rendered":"Anwendungsdaten speichern per VB.NET"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/14cb2b793953489c9642650435b30233\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Wenn man wie im Artikel &#8220;Standalone-Apps mit .NET programmieren&#8221; beschrieben kleine Hilfsprogramme erstellt, kommt es vor, dass man dort Daten eingibt, die auch nach dem Schlie&szlig;en und dem erneuten &Ouml;ffnen der Anwendung noch erhalten sein sollen. Wenn Du in einer solchen Anwendung beispielsweise immer wieder Daten aus dem gleichen Verzeichnis verarbeiten m&ouml;chtest, willst Du das Verzeichnis nicht jedes Mal erneut ausw&auml;hlen. Man kann damit auch andere Daten wie Verbindungszeichenfolgen, Benutzernamen f&uuml;r Logins oder ganz allgemein Optionen speichern. All dies k&ouml;nnte man auch in eine Datenbank schreiben, aber wenn die Menge der Daten &uuml;berschaubar ist, erhalten wir mit der in diesem Artikel vorgestellten L&ouml;sung eine wesentlich leichtgewichtigere Alternative.<\/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<p>Als Entwickler, der sich viel mit Microsoft Access besch&auml;ftigt, w&uuml;rde ich mir w&uuml;nschen, dass diese Anwendung sich zum Beispiel beim Ausw&auml;hlen von Dateien f&uuml;r den Import das Verzeichnis merken w&uuml;rde, das ich beim letzten Mal verwendet habe. Leider ist das nicht der Fall, und dieses Verhalten trifft man leider immer wieder an verschiedenen Stellen an.<\/p>\n<p>Wenn ich selbst Beispiele oder L&ouml;sungen programmiere, bei denen Dateien f&uuml;r den Import oder Export von Daten festgelegt werden m&uuml;ssen, baue ich daher allein aus Faulheit rechtzeitig eine M&ouml;glichkeit ein, damit ein einmal ausgew&auml;hltes Verzeichnis gespeichert und beim n&auml;chsten &Ouml;ffnen der Anwendung nicht nochmals ausgew&auml;hlt werden muss.<\/p>\n<p>W&auml;hrend dies in Access logischerweise mit einer Optionentabelle geschieht, die man schnell selbst anlegt, ist dies bei einer .NET-Standalone-Anwendung wie in <b>Standalone-Apps mit .NET programmieren <\/b>(<b>www.vbentwickler.de\/358<\/b>) beschrieben recht aufwendig &#8211; zumindest, wenn diese Anwendung nicht ohnehin eine Datenbank verwendet. Allerdings gibt es eine Alternative, n&auml;mlich die Datei <b>App.config<\/b>. Diese dient speziell zum Speichern von Konfigurationsdateien, und welche Daten man darin speichert, ist dem Entwickler selbst &uuml;berlassen. Dieser Artikel zeigt, wie Du Daten aus Textfeldern beim Schlie&szlig;en der Anwendung speicherst und diese beim erneuten &Ouml;ffnen wiederherstellst.<\/p>\n<p>Dabei gehen wir wie folgt vor:<\/p>\n<ul>\n<li>Erstellen einer Anwendung mit Optionen<\/li>\n<li>Definieren der Einstellungen<\/li>\n<li>Erstellen einer Methode zum Speichern der Einstellung<\/li>\n<li>Erstellen einer Methode zum Wiederherstellen der Einstellung<\/li>\n<\/ul>\n<h2>Erstellen einer Anwendung mit Optionen<\/h2>\n<p>Als Erstes legen wir ein neues VB.NET-Projekt wie in <b>Standalone-Apps mit .NET programmieren <\/b>(<b>www.vbentwickler.de\/358<\/b>) beschrieben an. Diese enth&auml;lt Steuerelemente zum Eingeben von Daten &#8211; zum Beispiel Textfelder zur Eingabe von Texten und Zahlen, ein Kontrollk&auml;stchen und ein Auswahlfeld. Der Entwurf sieht wie in Bild 1 aus. Au&szlig;erdem finden wir zwei Schaltfl&auml;chen vor, mit denen wir die Daten speichern und wiederherstellen k&ouml;nnen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_359_001.png\" alt=\"Fenster mit den Beispielsteuerelementen\" width=\"549,6265\" height=\"279,5244\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Fenster mit den Beispielsteuerelementen<\/span><\/b><\/p>\n<p>Die Definition der Steuerelemente lautet in gek&uuml;rzter Form wie folgt:<\/p>\n<pre>&lt;Label&gt;Text:&lt;\/Label&gt;\r\n&lt;TextBox x:Name=\"txtOptionText\" ... \/&gt;\r\n&lt;Label&gt;Zahl:&lt;\/Label&gt;\r\n&lt;TextBox x:Name=\"txtOptionZahl\" ... \/&gt;\r\n&lt;Label&gt;Ja\/Nein:&lt;\/Label&gt;\r\n&lt;CheckBox x:Name=\"chkOptionJaNein\" ...\/&gt;\r\n&lt;Label&gt;Auswahl:&lt;\/Label&gt;\r\n&lt;ComboBox x:Name=\"cboAuswahl\"&gt;\r\n     &lt;ComboBoxItem&gt;Wert 1&lt;\/ComboBoxItem&gt;\r\n     &lt;ComboBoxItem&gt;Wert 2&lt;\/ComboBoxItem&gt;\r\n     &lt;ComboBoxItem&gt;Wert 3&lt;\/ComboBoxItem&gt;\r\n&lt;\/ComboBox&gt;\r\n&lt;StackPanel Orientation=\"Horizontal\" &gt;\r\n     &lt;Button x:Name=\"btnSpeichern\"         Click=\"btnSpeichern_Click\"&gt;Speichern&lt;\/Button&gt;\r\n     &lt;Button x:Name=\"btnWiederherstellen\"         Click=\"btnWiederherstellen_Click\"&gt;        Wiederherstellen&lt;\/Button&gt;\r\n&lt;\/StackPanel&gt;<\/pre>\n<h2>Definieren der Anwendungseinstellungen<\/h2>\n<p>Nun definieren wir die Einstellungen f&uuml;r die Werte, die wir in die Steuerelemente eingeben wollen. Dazu klicken wir im Projektmappen-Explorer doppelt auf den Eintrag <b>My Project<\/b>.<\/p>\n<p>Dies blendet den Bereich mit den Anwendungseinstellungen ein. F&uuml;r uns ist hier der Abschnitt <b>Einstellungen<\/b> interessant, der zun&auml;chst noch leer ist. Hier legen wir nun wie in Bild 2 einige Eintr&auml;ge an.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_359_002.png\" alt=\"Anlegen der Einstellungen\" width=\"649,627\" height=\"397,3\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Anlegen der Einstellungen<\/span><\/b><\/p>\n<p>Dabei geben wir den Namen an sowie den Typ.  Hier stehen die &uuml;blichen Datentypen zur Verf&uuml;gung. Als <b>Bereich <\/b>legen wir <b>Benutzer <\/b>fest, denn die Einstellungen sollen f&uuml;r den jeweiligen Benutzer gespeichert werden.<\/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\/55000359\/\">\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\/55000359?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\/55000359\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"22c77db969\"\/>\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>Wenn man wie im Artikel &#8220;Standalone-Apps mit .NET programmieren&#8221; beschrieben kleine Hilfsprogramme erstellt, kommt es vor, dass man dort Daten eingibt, die auch nach dem Schlie&szlig;en und dem erneuten &Ouml;ffnen der Anwendung noch erhalten sein sollen. Wenn Du in einer solchen Anwendung beispielsweise immer wieder Daten aus dem gleichen Verzeichnis verarbeiten m&ouml;chtest, willst Du das Verzeichnis nicht jedes Mal erneut ausw&auml;hlen. Man kann damit auch andere Daten wie Verbindungszeichenfolgen, Benutzernamen f&uuml;r Logins oder ganz allgemein Optionen speichern. All dies k&ouml;nnte man auch in einer Datenbank speichern, aber wenn die Menge der Daten &uuml;berschaubar ist, erhalten wir mit der in diesem Artikel vorgestellten L&ouml;sung eine wesentlich leichtgewichtigere Alternative.<\/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,44000023,44000032],"tags":[],"yst_prominent_words":[],"class_list":["post-55000359","post","type-post","status-publish","format-standard","hentry","category-66022023","category-662023","category-PowerApps","category-VBNETProgrammierung"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000359","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=55000359"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000359\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000359"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000359"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000359"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}