{"id":55000282,"date":"2021-08-01T00:00:00","date_gmt":"2021-12-31T14:21:27","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=282"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Markierung_bei_Fokuserhalt_der_TextBox","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Markierung_bei_Fokuserhalt_der_TextBox\/","title":{"rendered":"Markierung bei Fokuserhalt der TextBox"},"content":{"rendered":"<p><b>Im Artikel &#8220;Das TextBox-Steuerelement&#8221; haben wir die Grundlagen zum TextBox-Steuerelement beschrieben. Dort haben wir noch l&auml;ngst nicht alle M&ouml;glichkeiten behandelt, die es bei der Programmierung von TextBox-Steuerelementen unter WPF gibt. Im vorliegenden Artikel schauen wir uns an, wie Sie das Verhalten einer TextBox beim Fokuserhalt steuern k&ouml;nnen, genau genommen: Wie erreiche ich, dass die Einf&uuml;gemarke an einer bestimmten Stelle positioniert wird beziehungsweise der komplette Inhalt markiert wird Und das nicht nur f&uuml;r den Fokuserhalt durch die Tabulator- oder Eingabetaste, sondern auch beim Anklicken mit der Maustaste.<\/b><\/p>\n<h2>Einf&uuml;gemarke beim Fokuserhalt an bestimmter Position platzieren<\/h2>\n<p>Die folgenden Definitionen von <b>TextBox<\/b>-Elementen sollen die Einf&uuml;gemarke an verschiedenen Positionen platzieren, wenn das Element den Fokus erh&auml;lt. Das erste Element soll die Einf&uuml;gemarke am Start des Textes platzieren. Dazu nutzen wir das Ereignis <b>GotFocus<\/b>:<\/p>\n<pre>&lt;Label&gt;Einf&uuml;gemarke vorn:&lt;\/Label&gt;\r\n&lt;TextBox x:Name=\"txtCursorStart\" GotFocus=\"txtCursorStart_GotFocus\"&gt;Dies ist ein Beispieltext.&lt;\/TextBox&gt;<\/pre>\n<p>Daf&uuml;r hinterlegen wir die folgende Ereignismethode:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>txtCursorStart_GotFocus(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     txtCursorStart.Select(0, 0)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Diese verwendet die <b>Select<\/b>-Methode, um mit dem ersten Parameter die Startposition und mit der zweiten die L&auml;nge der Markierung festzulegen. Der Wert <b>0 <\/b>f&uuml;r den ersten Parameter f&uuml;gt die Einf&uuml;gemarke ganz vorn ein und der Wert <b>0 <\/b>f&uuml;r den zweiten Parameter sorgt daf&uuml;r, dass die Einf&uuml;gemarke nicht zu einer Markierung wird.<\/p>\n<p>F&uuml;r die Anzeige der Einf&uuml;gemarke ganz hinten im Textfeld f&uuml;gen wir ein weiteres Textfeld hinzu. F&uuml;r dieses definieren wir das gleiche Ereignis:<\/p>\n<pre>&lt;Label &gt;Einf&uuml;gemarke hinten:&lt;\/Label&gt;\r\n&lt;TextBox x:Name=\"txtCursorEnd\" GotFocus=\"txtCursorEnd_GotFocus\"&gt;Dies ist ein Beispieltext.&lt;\/TextBox&gt;<\/pre>\n<p>Die Methode, die durch dieses Ereignis ausgel&ouml;st wird, ermittelt f&uuml;r den ersten Parameter der <b>Select<\/b>-Methode jedoch mit der <b>Length<\/b>-Eigenschaft die L&auml;nge des im <b>TextBox<\/b>-Element enthaltenen und mit der Eigenschaft <b>Text <\/b>gelieferten Text. Der zweite Parameter hat wie im ersten Beispiel den Wert <b>0<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>txtCursorEnd_GotFocus(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     txtCursorEnd.Select(txtCursorEnd.Text.Length, 0)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Im dritten Textfeld wollen wir den vollst&auml;ndigen Text markieren, wenn das Textfeld den Fokus erh&auml;lt:<\/p>\n<pre>&lt;Label&gt;Alles markieren:&lt;\/Label&gt;\r\n&lt;TextBox x:Name=\"txtCursorAll\" GotFocus=\"txtCursorAll_GotFocus\"&gt;Dies ist ein Beispieltext.&lt;\/TextBox&gt;<\/pre>\n<p>Wir k&ouml;nnten auch hier die <b>Select<\/b>-Methode verwenden und als Startposition der Markierung den Wert <b>0 <\/b>und als Endposition die L&auml;nge des zu markierenden Textes &uuml;bergeben. Eleganter ist in diesem Fall jedoch der Einsatz der <b>SelectAll<\/b>-Methode:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>txtCursorAll_GotFocus(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     txtCursorAll.SelectAll()\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>All diese M&ouml;glichkeiten funktionieren gut, wenn der Benutzer den Fokus mit der Tabulator-Taste oder mit der Eingabe-Taste verschiebt (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/pic_282_001.png\" alt=\"Markieren von Text\" width=\"549,6265\" height=\"220,0812\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Markieren von Text<\/span><\/b><\/p>\n<p>Sobald er jedoch mit der Maus in eines der Textfelder klickt, erscheint die Einf&uuml;gemarke genau an der Stelle des Mausklicks. Beim Anklicken der dritten Schaltfl&auml;che, die den ganzen Text markieren sollte, blinkt sogar kurz die vollst&auml;ndige Markierung auf, bevor die Einf&uuml;gemarke an der Mausposition erscheint.<\/p>\n<p>In manchen F&auml;llen w&uuml;nschen wir uns jedoch auch beim Anklicken eines <b>TextBox<\/b>-Elements mit der Maus, dass dieses komplett markiert wird. F&uuml;r diesen Fall m&uuml;ssen wir uns also eine alternative M&ouml;glichkeit einfallen lassen. Aber ben&ouml;tigen wir ein anderes Ereignis Nein, wir &auml;ndern lediglich den Code des Ereignisses:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>txtCursorAll_GotFocus(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     <span style=\"color:blue;\">Dim <\/span>txt<span style=\"color:blue;\"> As <\/span>TextBox\r\n     txt = sender\r\n     txt.Dispatcher.BeginInvoke(<span style=\"color:blue;\">New<\/span> Action(Sub() txt.SelectAll()))\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\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\/55000282\/\">\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\/55000282?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\/55000282\/\"\/>\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>Im Artikel &#8220;Das TextBox-Steuerelement&#8221; haben wir die Grundlagen zum TextBox-Steuerelement beschrieben. Dort haben wir noch l&auml;ngst nicht alle M&ouml;glichkeiten behandelt, die es bei der Programmierung von TextBox-Steuerelementen unter WPF gibt. Im vorliegenden Artikel schauen wir uns an, wie Sie das Verhalten einer TextBox beim Fokuserhalt steuern k&ouml;nnen, genau genommen: Wie erreiche ich, dass die Einf&uuml;gemarke an einer bestimmten Stelle positioniert wird beziehungsweise der komplette Inhalt markiert wird Und das nicht nur f&uuml;r den Fokuserhalt durch die Tabulator- oder Eingabetaste, sondern auch beim Anklicken mit der Maustaste.<\/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,44000015],"tags":[],"yst_prominent_words":[],"class_list":["post-55000282","post","type-post","status-publish","format-standard","hentry","category-662021","category-66042021","category-WPFSteuerelemente"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000282","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=55000282"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000282\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000282"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000282"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000282"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000282"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}