{"id":55000199,"date":"2019-12-01T00:00:00","date_gmt":"2020-03-27T19:40:04","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=199"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Fenster_mehrfach_oeffnen","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Fenster_mehrfach_oeffnen\/","title":{"rendered":"Fenster mehrfach &ouml;ffnen"},"content":{"rendered":"<p><b>Wenn Sie in einem &Uuml;bersichtsfenster eine Liste von Datens&auml;tzen anzeigen, beispielsweise von Kunden, verwenden Sie vermutlich auch ein weiteres Fenster, indem Sie die Details eines Kunden anzeigen k&ouml;nnen. Mit einem gleichzeitig ge&ouml;ffneten Kundendetail-Fenster ist die Handhabung recht einfach &#8211; vor allem, wenn Sie dieses Fenster als modalen Dialog &ouml;ffnen. Interessanter wird es, wenn Sie die M&ouml;glichkeit bieten wollen, mehr als einen Kunden gleichzeitig im Detailfenster anzuzeigen. Dann m&uuml;ssen Sie schon kontrollieren, welche Kunden bereits angezeigt werden und welche wieder geschlossen wurden. Dieser Artikel zeigt, wie Sie das mehrfache &Ouml;ffnen eines Fensters realisieren und wie Sie die ge&ouml;ffneten Fenster vom &ouml;ffnenden Fenster aus verwalten k&ouml;nnen. <\/b><\/p>\n<h2>Fenster mit &Uuml;bersichtsliste<\/h2>\n<p>Als Erstes ben&ouml;tigen wir f&uuml;r unser Beispiel ein Fenster, das ein <b>ListBox<\/b>-Steuerelement zur Anzeige der Kunden&uuml;bersicht enth&auml;lt. Dieses sieht im Entwurf wie in Bild 1 aus. Das <b>ListBox<\/b>-Steuerelement soll die Daten einer Auflistung namens <b>Kunden <\/b>anzeigen, und von diesem das Feld <b>Nachname <\/b>verwenden.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_06\/pic_199_001.png\" alt=\"Fenster mit ListBox f&uuml;r die Auswahl von Kunden\" width=\"499,6607\" height=\"308,7526\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Fenster mit ListBox f&uuml;r die Auswahl von Kunden<\/span><\/b><\/p>\n<p>Dazu richten wir dieses mit den folgenden XAML-Definitionen ein. Die Definition der <b>ListBox <\/b>enth&auml;lt unter <b>ItemsSource <\/b>die Angabe der Auflistung, aus der die Daten stammen, mit <b>DisplayMemberPath <\/b>die Eigenschaft der Elemente der Auflistung, die angezeigt werden soll und mit <b>MouseDoubleClick <\/b>die Angabe einer Methode, die beim Doppelklicken auf einen der Eintr&auml;ge ausgel&ouml;st werden soll:<\/p>\n<pre>&lt;Label&gt;Details anzeigen per Doppelklick&lt;\/Label&gt;\r\n&lt;ListBox x:Name=\"lstKunden\" Grid.Row=\"1\" ItemsSource=\"{Binding Kunden}\" DisplayMemberPath=\"Nachname\" MouseDoubleClick=\"LstKunden_MouseDoubleClick\"&gt;&lt;\/ListBox&gt;<\/pre>\n<p>Die Kunden bilden wir in der folgenden Klasse ab, f&uuml;r die wir einen Konstruktor zur einfachen &Uuml;bergabe der Daten beim Anlegen neuer Elemente hinzugef&uuml;gt haben:<\/p>\n<pre><span style=\"color:blue;\">Public Class<\/span> Kunde\r\n     <span style=\"color:blue;\">Public <\/span>Sub New(iD<span style=\"color:blue;\"> As String<\/span>, vorname<span style=\"color:blue;\"> As String<\/span>, nachname<span style=\"color:blue;\"> As String<\/span>)\r\n         Me.ID = iD\r\n         Me.Vorname = vorname\r\n         Me.Nachname = nachname\r\n     End Sub\r\n     <span style=\"color:blue;\">Public <\/span>Property ID<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Public <\/span>Property Vorname<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Public <\/span>Property Nachname<span style=\"color:blue;\"> As String<\/span>\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<p>In der Code behind-Klasse f&uuml;r das Hauptfenster deklarieren wir das <b>List<\/b>-Objekt, das die im <b>ListBox<\/b>-Steuerelement anzuzeigenden <b>Kunde<\/b>-Elemente aufnehmen soll. Au&szlig;erdem initialisieren wir die Komponente in einer Konstruktor-Methode, rufen dort eine Methode zum F&uuml;llen des <b>List<\/b>-Objekts f&uuml;r die Kunden auf und stellen den <b>DataContext <\/b>auf das Code behind-Formular ein:<\/p>\n<pre><span style=\"color:blue;\">Class<\/span> MainWindow\r\n     <span style=\"color:blue;\">Public <\/span>Property Kunden<span style=\"color:blue;\"> As <\/span>List(Of Kunde)\r\n     <span style=\"color:blue;\">Public <\/span>Sub New()\r\n         InitializeComponent()\r\n         KundenFuellen()\r\n         DataContext = Me\r\n     End Sub<\/pre>\n<p>Die Methode <b>KundenFuellen <\/b>erstellt das <b>List<\/b>-Objekt f&uuml;r die Kunden und f&uuml;llt diese mit f&uuml;nf Beispielobjekten:<\/p>\n<pre>     <span style=\"color:blue;\">Private <\/span>Sub KundenFuellen()\r\n         <span style=\"color:blue;\">Dim <\/span>Kunde<span style=\"color:blue;\"> As <\/span>Kunde\r\n         Kunden = <span style=\"color:blue;\">New<\/span> List(Of Kunde)\r\n         Kunden.Add(<span style=\"color:blue;\">New<\/span> Kunde(1, \"Andr&eacute;\", \"Minhorst\"))\r\n         Kunden.Add(<span style=\"color:blue;\">New<\/span> Kunde(2, \"Klaus\", \"M&uuml;ller\"))\r\n         Kunden.Add(<span style=\"color:blue;\">New<\/span> Kunde(3, \"Bernd\", \"Meier\"))\r\n         Kunden.Add(<span style=\"color:blue;\">New<\/span> Kunde(4, \"Beate\", \"Klausing\"))\r\n         Kunden.Add(<span style=\"color:blue;\">New<\/span> Kunde(5, \"D&ouml;rte\", \"Becker\"))\r\n     End Sub<\/pre>\n<p>Schlie&szlig;lich f&uuml;gen wir dem Code behind-Modul noch die Methode hinzu, die durch einen Doppelklick auf einen der <b>ListBox<\/b>-Eintr&auml;ge ausgel&ouml;st wird. Diese schreibt zun&auml;chst den per <b>sender <\/b>&uuml;bergebenen Ausl&ouml;ser der Prozedur in die Variable <b>lst<\/b>. Dann erstellt sie eine neue Instanz des Fensters <b>Kundendetails <\/b>und &uuml;bergibt dieser das Objekt, das der Benutzer im <b>ListBox<\/b>-Element angeklickt hat:<\/p>\n<pre>     <span style=\"color:blue;\">Private <\/span>Sub LstKunden_MouseDoubleClick(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>MouseButtonEventArgs)\r\n         <span style=\"color:blue;\">Dim <\/span>wnd<span style=\"color:blue;\"> As <\/span>Kundendetails\r\n         <span style=\"color:blue;\">Dim <\/span>lst<span style=\"color:blue;\"> As <\/span>ListBox\r\n         lst = sender\r\n         wnd = <span style=\"color:blue;\">New<\/span> Kundendetails(lst.SelectedItem)\r\n         wnd.Show()\r\n     End Sub\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<h2>Fenster zur Anzeige der Kundendetails<\/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\/55000199\/\">\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\/55000199?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\/55000199\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"dbce743e9d\"\/>\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 Sie in einem &Uuml;bersichtsfenster eine Liste von Datens&auml;tzen anzeigen, beispielsweise von Kunden, verwenden Sie vermutlich auch ein weiteres Fenster, indem Sie die Details eines Kunden anzeigen k&ouml;nnen. Mit einem gleichzeitig ge&ouml;ffneten Kundendetail-Fenster ist die Handhabung recht einfach &#8211; vor allem, wenn Sie dieses Fenster als modalen Dialog &ouml;ffnen. Interessanter wird es, wenn Sie die M&ouml;glichkeit bieten wollen, mehr als einen Kunden gleichzeitig im Detailfenster anzuzeigen. Dann m&uuml;ssen Sie schon kontrollieren, welche Kunden bereits angezeigt werden und wieder geschlossen werden. Dieser Artikel zeigt, wie Sie das mehrfache &Ouml;ffnen eines Fensters realisieren und wie Sie die ge&ouml;ffneten Fenster vom &ouml;ffnenden Fenster aus verwalten 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":[662019,66062019,44000002],"tags":[],"yst_prominent_words":[],"class_list":["post-55000199","post","type-post","status-publish","format-standard","hentry","category-662019","category-66062019","category-Benutzeroberflaeche_mit_WPF"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000199","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=55000199"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000199\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000199"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000199"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000199"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}