{"id":55000283,"date":"2021-08-01T00:00:00","date_gmt":"2021-12-31T14:21:34","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=283"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"AfterUpdateEreignis_fuer_TextBoxElemente","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/AfterUpdateEreignis_fuer_TextBoxElemente\/","title":{"rendered":"AfterUpdate-Ereignis f&uuml;r TextBox-Elemente"},"content":{"rendered":"<p><b>Das TextBox-Steuerelement bietet einige Ereignisse, die sich rund um die Dateneingabe drehen. Eines davon hei&szlig;t TextChanged &#8211; dieses haben wir bereits im Artikel &#8220;Das TextBox-Steuerelement&#8221; vorgestellt. W&auml;hrend dieses Ereignis bei Eingabe jedes einzelnen Zeichens feuert, ben&ouml;tigen wir auch noch ein Ereignis, das uns mitteilt, wann der Benutzer die Eingabe in ein TextBox-Element abgeschlossen hat &#8211; beispielsweise, um nach der Eingabe der Nummer eines Datensatzes in einer Datensatznavigation direkt zum gew&uuml;nschten Datensatz zu springen oder auch eine Suche nach dem eingegebenen Begriff zu starten. In diesem Artikel zeigen wir, wie das gelingt.<\/b><\/p>\n<p>Im Artikel <b>Das TextBox-Steuerelement <\/b>(<b>www.datenbankentwickler.net\/215<\/b>) haben wir bereits das Ereignis <b>TextChanged <\/b>vorgestellt. Dieses Ereignis ist praktisch, aber in manchen F&auml;llen ben&ouml;tigen wir doch noch weitere M&ouml;glichkeiten zum Programmieren von Textfeldern. Das Ereignis <b>TextChanged<\/b> feuert nach jeder &Auml;nderung des enthaltenen Texts, also auch dann, wenn der Benutzer nur ein Zeichen hinzugef&uuml;gt oder entfernt hat.<\/p>\n<p>Wenn wir aber beispielsweise wissen m&ouml;chten, wann die &Auml;nderung abgeschlossen ist &#8211; also beispielsweise durch Bet&auml;tigen der Eingabetaste oder der Tabulator-Taste oder durch Verschieben des Fokus auf ein anderes Steuerelement mit der Maus -, dann ben&ouml;tigen wir andere Ereignisse. <\/p>\n<h2>Ereignis beim Beenden der Eingabe<\/h2>\n<p>Was wir suchen, ist ein Pendant zum Ereignis <b>Nach Aktualisierung <\/b>beziehungsweise <b>AfterUpdate <\/b>von Textfeldern unter Microsoft Access. <\/p>\n<p>Im ersten N&auml;herungsschritt wollen wir das Bet&auml;tigen der Eingabe- oder Tabulatortaste bei der Eingabe in das Textfeld abfangen. Dazu schauen wir uns zun&auml;chst an, wann genau beim Bet&auml;tigen einer dieser Tasten unter Access das <b>AfterUpdate<\/b>-Ereignis ausgel&ouml;st wird. Dabei stellen wir fest, dass dies bereits beim Herunterdr&uuml;cken der Taste geschieht. Also bauen wir genau dieses Verhalten nach &#8211; und zwar mit der <b>KeyDown<\/b>-Methode.<\/p>\n<p>Dazu legen wir folgendes <b>TextBox<\/b>-Element an und hinterlegen direkt das Attribut <b>KeyDown <\/b>mit der Angabe der auszuf&uuml;hrenden Ereignismethode:<\/p>\n<pre>&lt;TextBox x:Name=\"txtAfterUpdate\" KeyDown=\"txtAfterUpdate_KeyDown\"&gt;&lt;\/TextBox&gt;<\/pre>\n<p>Diese soll die folgende Ereignismethode ausl&ouml;sen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>txtAfterUpdate_KeyDown(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>KeyEventArgs)\r\n     <span style=\"color:blue;\">Dim <\/span>txt<span style=\"color:blue;\"> As <\/span>TextBox\r\n     txt = sender\r\n     Select Case e.Key\r\n         <span style=\"color:blue;\">Case <\/span>Key.Enter, Key.Tab\r\n             MessageBox.Show(\"Der Text lautet ''\" & txt.Text & \"''\")\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Methode referenziert das mit dem Parameter <b>sender <\/b>&uuml;bergebene ausl&ouml;sende Steuerelement mit der Variablen <b>txt <\/b>und pr&uuml;ft dann, ob das mit dem Parameter <b>e <\/b>gelieferte Objekt des Typs <b>KeyEventArgs <\/b>f&uuml;r die Eigenschaft <b>Key <\/b>entweder den Wert <b>Key.Enter <\/b>oder <b>Key.Tab <\/b>liefert. Ist das der Fall, soll eine Meldung mit dem aktuellen Inhalt des Textfeldes ausgegeben werden.<\/p>\n<p>Das Ergebnis ist f&uuml;r den ersten Zwischenschritt schon nicht schlecht: Wenn wir das Textfeld mit der Eingabe- oder Tabulatortaste verlassen, wird das Ereignis ausgel&ouml;st und gibt den aktuellen Text aus (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/pic_283_001.png\" alt=\"Ausgabe einer Meldung beim Verlassen des Feldes\" width=\"499,6267\" height=\"248,2222\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Ausgabe einer Meldung beim Verlassen des Feldes<\/span><\/b><\/p>\n<h2>AcceptsReturn und AcceptsTab<\/h2>\n<p>Es gibt jedoch zwei Attribute namens <b>AcceptsReturn <\/b>und <b>AcceptsTab<\/b>, die angeben, ob das Bet&auml;tigen der Eingabe- beziehungsweise der Tabulatortaste sich auf den Inhalt des Textfeldes auswirkt oder ob diese als Abschluss der Eingabe interpretiert werden sollen.<\/p>\n<p>Stellen Sie beispielsweise <b>AcceptsReturn <\/b>auf <b>True <\/b>ein, dann l&ouml;st die Bet&auml;tigung der Eingabetaste innerhalb des Textfeldes nicht das Ereignis <b>KeyDown <\/b>aus. Gleiches gilt f&uuml;r die Tabulatortaste in Verbindung mit dem Attribut <b>AcceptsTab<\/b>.<\/p>\n<h2>Ereignis nur nach &Auml;nderung<\/h2>\n<p>Nun wollen wir aber dass Ereignis After Update abbilden, was nur dann ausgel&ouml;st wird, wenn der Benutzer gegen&uuml;ber dem vorherigen Zustand auch eine &Auml;nderung am Inhalt des Textfeldes durchgef&uuml;hrt hat. Wir m&uuml;ssen also auf irgendeine Weise abgleichen, ob der beim Ausl&ouml;sen der Methode im <b>TextBox<\/b>-Element enthaltene Wert sich von dem unterscheidet, der vor der &Auml;nderung vorhanden war.<\/p>\n<h2>Alternative: Datenbindung mit UpdateSourceTrigger<\/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\/55000283\/\">\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\/55000283?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\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000283\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"876e5995cf\"\/>\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>Das TextBox-Steuerelement bietet einige Ereignisse, die sich rund um die Dateneingabe drehen. Eines davon hei&szlig;t TextChanged &#8211; dieses haben wir bereits im Artikel &#8220;Das TextBox-Steuerelement&#8221; vorgestellt. W&auml;hrend dieses Ereignis bei Eingabe jedes einzelnen Zeichens feuert, ben&ouml;tigen wir auch noch ein Ereignis, das uns mitteilt, wann der Benutzer die Eingabe in ein TextBox-Element abgeschlossen hat &#8211; beispielsweise, um nach der Eingabe der Nummer eines Datensatzes in einer Datensatznavigation direkt zum gew&uuml;nschten Datensatz zu springen oder auch eine Suche nach dem eingegebenen Begriff zu starten. In diesem Artikel zeigen wir, wie das gelingt.<\/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":[662021,66042021,44000020,44000028,44000015],"tags":[],"yst_prominent_words":[],"class_list":["post-55000283","post","type-post","status-publish","format-standard","hentry","category-662021","category-66042021","category-Entity_Framework_Core","category-Word_programmieren","category-WPFSteuerelemente"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000283","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=55000283"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000283\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000283"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000283"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000283"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000283"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}