{"id":55000242,"date":"2020-12-01T00:00:00","date_gmt":"2020-12-23T15:46:11","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=242"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Commands_verwenden","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Commands_verwenden\/","title":{"rendered":"Commands verwenden"},"content":{"rendered":"<p><b>Wenn Sie unter Access und VBA Ereignisse programmiert haben, hat beispielsweise jedes Steuer-element, jede Ribbon-Schaltfl&auml;che und jeder Kontextmen&uuml;-Eintrag ein eigenes Ereignis erhalten &#8211; auch, wenn diese genau die gleiche Funktion ausl&ouml;sen sollten. Das war schon durch die unterschiedlichen Schnittstellen n&ouml;tig. Unter WPF k&ouml;nnen Sie ein und dieselbe Funktion von verschiedenen Steuerelementen aus ausl&ouml;sen. Das gelingt allerdings nicht mit herk&ouml;mmlichen Ereignismethoden, sondern mit sogenannten Commands. Was das ist und wie Sie es in Ihre Anwendungen einbauen k&ouml;nnen, zeigt der vorliegende Artikel.<\/b><\/p>\n<p><b>Vorteil: Alles an einem Ort<\/b><\/p>\n<p>Neben der M&ouml;glichkeit, benutzerdefinierte Ereignisse durch Commands abzubilden und diese von &uuml;berall in der Anwendung aufzurufen, bieten Commands noch weitere M&ouml;glichkeiten: So gibt es auch eingebaute Commands, die etwa Basisfunktionalit&auml;ten der Zwischenablage wie Kopieren, Ausschneiden oder Einf&uuml;gen bereitstellen. Wenn Sie einmal mit Access programmiert haben, wissen Sie, dass diese Funktionen immer in Form von API-Funktionen selbst bereitgestellt werden mussten und Sie nicht einfach die Systemfunktionen nutzen konnten. Diese w&uuml;rden Sie dann von jedem Ort, wo diese Funktion ben&ouml;tigt wird, aufrufen m&uuml;ssen, und zwar von der daf&uuml;r vorgesehenen Ereignisporzedur aus. Wir schauen uns also in diesem Artikel zwei verschiedene Typen von Commands an: benutzerdefinierte und eingebaute Commands.<\/p>\n<p><b>Vorteil: Tastenkombinationen<\/b><\/p>\n<p>Ein weiterer Vorteil von Commands ist, dass Sie f&uuml;r ein benutzerdefiniertes Command eine Tastenkombination definieren k&ouml;nnen beziehungsweise, dass die Tastenkombinationen f&uuml;r eingebaute Commands bereits vorhanden sind &#8211; wie beispielsweise <b>Strg + C<\/b>, <b>Strg + X<\/b> oder <b>Strg + V<\/b> f&uuml;r <b>Kopieren<\/b>, <b>Ausschneiden <\/b>und <b>Einf&uuml;gen<\/b>.<\/p>\n<p><b>Vorteil: Aktivieren und Deaktivieren<\/b><\/p>\n<p>Commands wie die zum Kopieren, Ausschneiden oder Einf&uuml;gen des aktuell markierten Inhalts werden automatisch aktiviert oder deaktiviert &#8211; je nachdem, ob gerade ein Inhalt zum Kopieren oder Ausschneiden markiert beziehungsweise ob die Zwischenablage &uuml;berhaupt Inhalt enth&auml;lt, der aktuell eingef&uuml;gt werden kann (siehe Bild 1). Auch f&uuml;r benutzerdefinierte Commands k&ouml;nnen Sie an einer Stelle festlegen, ob und wann diese aktiviert oder deaktiviert sind &#8211; abh&auml;ngig vom jeweiligen Kontext. W&auml;hrend das f&uuml;r die Funktionen der Zwischenablage automatisch funktioniert, schauen wir uns sp&auml;ter auch an, wie Sie benutzerdefinierte Commands von einer Stelle aus aktivieren und deaktivieren.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/pic_242_001.png\" alt=\"Aktivierte und deaktivierte Kontextmen&uuml;-Eintr&auml;ge\" width=\"549,6265\" height=\"223,3198\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Aktivierte und deaktivierte Kontextmen&uuml;-Eintr&auml;ge<\/span><\/b><\/p>\n<p><b>Definition von Commands<\/b><\/p>\n<p>Wenn Sie ein Command definieren, erledigen Sie das unter Verwendung der <b>ICommand<\/b>-Schnittstelle. Diese sieht vor, dass Sie die folgenden beiden Methoden implementieren:<\/p>\n<ul>\n<li><b>Execute<\/b>: Enth&auml;lt die Anweisungen, die beim Aufruf des Commands ausgef&uuml;hrt werden sollen.<\/li>\n<li><b>CanExecute<\/b>: Enth&auml;lt Code, der festlegt, ob das Command gerade aktiviert oder deaktiviert ist.<\/li>\n<\/ul>\n<p><b>Commands aufrufen<\/b><\/p>\n<p>Um ein solches Command aufzurufen, m&uuml;ssen Sie f&uuml;r das jeweilige Steuer-element &uuml;ber ein sogenanntes Command binding festlegen, welches Command f&uuml;r das jeweilige Ereignis aufgerufen werden soll. F&uuml;r eingebaute Commands ist dies einfacher als f&uuml;r benutzerdefinierte Commands. Wir schauen uns das f&uuml;r ein eingebautes Command an einem einfachen Beispiel an.<\/p>\n<p>Dabei wollen wir die drei Befehle zum Ausschneiden, Kopieren und Einf&uuml;gen in drei Schaltfl&auml;chen unterbringen und mit diesen den Inhalt eines Textfeldes bearbeiten k&ouml;nnen. Der WPF-Code daf&uuml;r sieht wie folgt aus:<\/p>\n<pre>&lt;StackPanel Orientation=\"Horizontal\"&gt;\r\n     &lt;Button x:Name=\"cmdAusschneiden\" Command=\"ApplicationCommands.Cut\"&gt;Ausschneiden&lt;\/Button&gt;\r\n     &lt;Button x:Name=\"cmdKopieren\" Command=\"ApplicationCommands.Copy\"&gt;Kopieren&lt;\/Button&gt;\r\n     &lt;Button x:Name=\"cmdEinfuegen\" Command=\"ApplicationCommands.Paste\"&gt;Einf&uuml;gen&lt;\/Button&gt;\r\n&lt;\/StackPanel&gt;\r\n&lt;TextBox x:Name=\"txtText\" Grid.Row=\"1\" Width=\"200\"\/&gt;<\/pre>\n<p>Wir haben hier herk&ouml;mmliche Schaltfl&auml;chen angelegt, f&uuml;r die wir allerdings nicht das <b>Click<\/b>-Ereignis definiert haben, sondern mit dem <b>Command<\/b>-Attribut ein Command definiert haben, das beim Anklicken der Schaltfl&auml;che ausgel&ouml;st werden soll.<\/p>\n<p>Das Ergebnis sieht wie in Bild 2 aus. Leider werden die Schaltfl&auml;chen nicht aktiviert oder deaktiviert, wenn man einen Teil des Textes im Textfeld markiert. Dazu fehlt freilich noch ein Attribut &#8211; wir haben n&auml;mlich noch nicht festgelegt, auf welches Element der Benutzeroberfl&auml;che sich die Commands beziehen sollen. Das legen wir mit dem Attribut <b>CommandTarget <\/b>fest, welches per Binding das entsprechende Steuer-element referenziert:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/pic_242_002.png\" alt=\"Schaltfl&auml;chen, die nicht aktiviert werden\" width=\"449,6946\" height=\"151,319\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Schaltfl&auml;chen, die nicht aktiviert werden<\/span><\/b><\/p>\n<pre>&lt;Button x:Name=\"cmdAusschneiden\" Command=\"ApplicationCommands.Cut\"     CommandTarget=\"{Binding ElementName=txtText}\"&gt;Ausschneiden&lt;\/Button&gt;\r\n&lt;Button x:Name=\"cmdKopieren\" Command=\"ApplicationCommands.Copy\"     CommandTarget=\"{Binding ElementName=txtText}\"&gt;Kopieren&lt;\/Button&gt;\r\n&lt;Button x:Name=\"cmdEinfuegen\" Command=\"ApplicationCommands.Paste\"     CommandTarget=\"{Binding ElementName=txtText}\"&gt;Einf&uuml;gen&lt;\/Button&gt;<\/pre>\n<p>Wenn das Textfeld leer ist, die Zwischenablage jedoch einen Wert enth&auml;lt, der in das Textfeld eingef&uuml;gt werden kann, wird nur die <b>Einf&uuml;gen<\/b>-Schaltfl&auml;che aktiviert &#8211; und sie f&uuml;gt den Inhalt der Zwischenablage auch per Mausklick ein (siehe Bild 3). Wenn sich beispielsweise ein Objekt wie eine Datei in der Zwischenablage befindet, wird die Einf&uuml;gen-Schaltfl&auml;che nicht aktiviert, denn ein solches Objekt kann nicht in das Textfeld eingef&uuml;gt werden. Gleiches gilt, wenn die Zwischenablage komplett leer ist.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/pic_242_003.png\" alt=\"Aktivierte Einf&uuml;gen-Schaltfl&auml;che\" width=\"424,7115\" height=\"147,4548\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Aktivierte Einf&uuml;gen-Schaltfl&auml;che<\/span><\/b><\/p>\n<p>Hat der Benutzer zus&auml;tzlich noch mindestens ein Zeichen im Textfeld <b>txtText<\/b> markiert, werden auch die beiden Schaltfl&auml;chen zum Ausschneiden und Kopieren aktiviert (siehe Bild 4). Und auch das Ausschneiden und Kopieren mit den Schaltfl&auml;chen funktioniert ohne Probleme.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/pic_242_004.png\" alt=\"Durch Markierung aktivierte Ausschneiden- und Einf&uuml;gen-Schaltfl&auml;chen\" width=\"424,7115\" height=\"144,0054\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Durch Markierung aktivierte Ausschneiden- und Einf&uuml;gen-Schaltfl&auml;chen<\/span><\/b><\/p>\n<p>Hier geschehen also einige Dinge automatisch &#8211; sowohl die Aktionen, die durch die Schaltfl&auml;chen ausgef&uuml;hrt werden sollen, werden durch die Zuweisung des entsprechenden Wertes zum Attribut <b>Command <\/b>automatisch ausgef&uuml;hrt als auch die Aktivierung oder Deaktivierung abh&auml;ngig vom Status des mit <b>CommandTarget <\/b>angegebenen Steuerelements.<\/p>\n<p><b>Commands mit IntelliSense<\/b><\/p>\n<p>Weiter oben haben wir einfach das Command als Wert der <b>Command<\/b>-Eigenschaft angegeben. Wenn Sie das auch gemacht haben, ist Ihnen vielleicht aufgefallen, dass es hier keine IntelliSense-Unterst&uuml;tzung gab, was f&uuml;r Visual Studio eher ungew&ouml;hnlich ist. Mit einer etwas anderen Schreibweise gelangen Sie allerdings schnell zur Anzeige der m&ouml;glichen Befehle per IntelliSense. Diese sieht wie folgt aus &#8211; hier am Beispiel der Ausschneiden-Schaltfl&auml;che:<\/p>\n<pre>&lt;Button x:Name=\"cmdAusschneiden\" Command=\"{x:Static ApplicationCommands.Cut}\"     CommandTarget=\"{Binding ElementName=txtText}\"&gt;Ausschneiden&lt;\/Button&gt;<\/pre>\n<p><b>Eingebaute Commands &uuml;berschreiben<\/b><\/p>\n<p>Wenn Sie schon eingebaute Commands nutzen k&ouml;nnen, um von verschiedenen Steuerelementen darauf zugreifen zu k&ouml;nnen, dann w&auml;re es doch praktisch, wenn man diese eingebauten Commands auch &uuml;berschreiben k&ouml;nnte. Damit meinen wir beispielsweise, dass Sie die Ausschneiden-Aktion <b>ApplicationCommands.Cut <\/b>durch eine eigene Methode ersetzen, die vor dem Ausschneiden noch nachfragt, ob der Inhalt wirklich ausgeschnitten werden soll.<\/p>\n<p>Dazu k&ouml;nnen Sie mit dem Executed-Attribut eine statt der eigentlichen Funktion einzusetzende Methode angeben und diese dann im Code behind-Modul des WPF-Fensters implementieren. Dazu f&uuml;gen wir in der XAML-Datei ein Element namens <b>TextBox.CommandBindings <\/b>mit dem Unterelement <b>CommandBinding <\/b>hinzu, das die drei Attribute <b>Command<\/b>, <b>CanExecute <\/b>und <b>Executed <\/b>enth&auml;lt &#8211; und zwar f&uuml;r das Textfeld, f&uuml;r das wir das Command anpassen wollen:<\/p>\n<pre>&lt;TextBox x:Name=\"txtText\" Grid.Row=\"1\" Width=\"200\"&gt;\r\n     &lt;TextBox.CommandBindings&gt;\r\n         &lt;CommandBinding Command=\"{x:Static ApplicationCommands.Cut}\" CanExecute=\"CommandBinding_CanExecute\"             Executed=\"CommandBinding_Executed\" \/&gt;\r\n     &lt;\/TextBox.CommandBindings&gt;\r\n&lt;\/TextBox&gt;<\/pre>\n<p>Hier tragen wir ein, dass es sich um das <b>Command<\/b>-Element <b>ApplicationCommands.Cut <\/b>handelt und wie die auszuf&uuml;hrenden Methoden f&uuml;r <b>CanExecute <\/b>und <b>Executed <\/b>hei&szlig;en.<\/p>\n<p>Den Rest der Definition f&uuml;r die Schaltfl&auml;che <b>cmdAusschneiden <\/b>behalten wir bei:<\/p>\n<pre>&lt;Grid&gt;\r\n     &lt;StackPanel Orientation=\"Horizontal\"&gt;\r\n             &lt;Button x:Name=\"cmdAusschneiden\" Command=\"{x:Static ApplicationCommands.Cut}\"                 CommandTarget=\"{Binding ElementName=txtText}\" Content=\"Ausschneiden\" &gt;\r\n             &lt;\/Button&gt;\r\n         ...\r\n&lt;\/Grid&gt;<\/pre>\n<p>In der Code behind-Klasse f&uuml;gen wir die beiden f&uuml;r die Attribute <b>CanExecute <\/b>und <b>Executed <\/b>angegebenen Methoden hinzu. Um das m&ouml;glichst einfach zu gestalten, erledigen wir das wie folgt:<\/p>\n<ul>\n<li>Tippen Sie den Namen des Attributs ein, also beispielsweise <b>Executed<\/b>.<\/li>\n<li>Geben Sie das Gleichheitszeichen ein. Es erscheint ein Popup mit zwei Befehlen, von denen Sie den ersten namens <b><Neuer Ereignishandler> <\/b>w&auml;hlen.<\/li>\n<li>Das legt automatisch die Ereignismethode mit den passenden Parametern in der Code behind-Datei an.<\/li>\n<\/ul>\n<p>Die Code behind-Klasse sieht nach dem Anlegen der beiden Ereignismethoden <b>CommandBinding_CanExecute <\/b>und <b>CommandBinding_Executed <\/b>wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Class<\/span> MainWindow\r\n     <span style=\"color:blue;\">Private <\/span>Sub CommandBinding_CanExecute(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>CanExecuteRoutedEventArgs)\r\n         e.CanExecute = <span style=\"color:blue;\">True<\/span>\r\n     End Sub\r\n     <span style=\"color:blue;\">Private <\/span>Sub CommandBinding_Executed(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>ExecutedRoutedEventArgs)\r\n         MessageBox.Show(\"&Uuml;berschriebenes Ausschneiden-Command\")\r\n     End Sub\r\n<span style=\"color:blue;\">End Class<\/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\/55000242\/\">\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\/55000242?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\/55000242\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"08c30340c1\"\/>\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 unter Access und VBA Ereignisse programmiert haben, hat beispielsweise jedes Steuer-element, jede Ribbon-Schaltfl&auml;che und jeder Kontextmen&uuml;-Eintrag ein eigenes Ereignis erhalten &#8211; auch, wenn diese genau die gleiche Funktion ausl&ouml;sen sollten. Das war schon durch die unterschiedlichen Schnittstellen n&ouml;tig. Unter WPF k&ouml;nnen Sie ein und dieselbe Funktion von verschiedenen Steuerelementen aus ausl&ouml;sen. Das gelingt allerdings nicht mit herk&ouml;mmlichen Ereignismethoden, sondern mit sogenannten Commands. Was das ist und wie Sie es in Ihre Anwendungen einbauen k&ouml;nnen, zeigt der vorliegende Artikel.<\/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":[662020,66062020,44000003],"tags":[],"yst_prominent_words":[],"class_list":["post-55000242","post","type-post","status-publish","format-standard","hentry","category-662020","category-66062020","category-WPFGrundlagen"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.8 - aioseo.com -->\n\t<meta name=\"description\" content=\"Wenn Sie unter Access und VBA Ereignisse programmiert haben, hat beispielsweise jedes Steuer-element, jede Ribbon-Schaltfl\u00e4che und jeder Kontextmen\u00fc-Eintrag ein eigenes Ereignis erhalten - auch, wenn diese genau die gleiche Funktion ausl\u00f6sen sollten. Das war schon durch die unterschiedlichen Schnittstellen n\u00f6tig. Unter WPF k\u00f6nnen Sie ein und dieselbe Funktion von verschiedenen Steuerelementen aus ausl\u00f6sen. Das gelingt allerdings nicht mit herk\u00f6mmlichen Ereignismethoden, sondern mit sogenannten Commands. Was das ist und wie Sie es in Ihre Anwendungen einbauen k\u00f6nnen, zeigt der vorliegende Artikel.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Andr\u00e9 Minhorst\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/vbentwickler.de\/Commands_verwenden\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.8\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Visual Basic Entwickler - Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Commands verwenden - Visual Basic Entwickler\" \/>\n\t\t<meta property=\"og:description\" content=\"Wenn Sie unter Access und VBA Ereignisse programmiert haben, hat beispielsweise jedes Steuer-element, jede Ribbon-Schaltfl\u00e4che und jeder Kontextmen\u00fc-Eintrag ein eigenes Ereignis erhalten - auch, wenn diese genau die gleiche Funktion ausl\u00f6sen sollten. Das war schon durch die unterschiedlichen Schnittstellen n\u00f6tig. Unter WPF k\u00f6nnen Sie ein und dieselbe Funktion von verschiedenen Steuerelementen aus ausl\u00f6sen. Das gelingt allerdings nicht mit herk\u00f6mmlichen Ereignismethoden, sondern mit sogenannten Commands. Was das ist und wie Sie es in Ihre Anwendungen einbauen k\u00f6nnen, zeigt der vorliegende Artikel.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/vbentwickler.de\/Commands_verwenden\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-12-23T15:46:11+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"-001-11-30T00:00:00+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Commands verwenden - Visual Basic Entwickler\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Wenn Sie unter Access und VBA Ereignisse programmiert haben, hat beispielsweise jedes Steuer-element, jede Ribbon-Schaltfl\u00e4che und jeder Kontextmen\u00fc-Eintrag ein eigenes Ereignis erhalten - auch, wenn diese genau die gleiche Funktion ausl\u00f6sen sollten. Das war schon durch die unterschiedlichen Schnittstellen n\u00f6tig. Unter WPF k\u00f6nnen Sie ein und dieselbe Funktion von verschiedenen Steuerelementen aus ausl\u00f6sen. Das gelingt allerdings nicht mit herk\u00f6mmlichen Ereignismethoden, sondern mit sogenannten Commands. Was das ist und wie Sie es in Ihre Anwendungen einbauen k\u00f6nnen, zeigt der vorliegende Artikel.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Commands_verwenden\\\/#blogposting\",\"name\":\"Commands verwenden - Visual Basic Entwickler\",\"headline\":\"Commands verwenden\",\"author\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"..\\\/fileadmin\\\/_temp_\\\/2020_06\\\/pic_242_001.png\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Commands_verwenden\\\/#articleImage\"},\"datePublished\":\"2020-12-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"inLanguage\":\"de-DE\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Commands_verwenden\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Commands_verwenden\\\/#webpage\"},\"articleSection\":\"2020, 6\\\/2020, WPF-Grundlagen\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Commands_verwenden\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vbentwickler.de\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2020\\\/#listItem\",\"name\":\"2020\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2020\\\/#listItem\",\"position\":2,\"name\":\"2020\",\"item\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2020\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Commands_verwenden\\\/#listItem\",\"name\":\"Commands verwenden\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Commands_verwenden\\\/#listItem\",\"position\":3,\"name\":\"Commands verwenden\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2020\\\/#listItem\",\"name\":\"2020\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\",\"name\":\"Datenbankentwickler\",\"description\":\"Das Magazin f\\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/cropped-header_vbe-1.png\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Commands_verwenden\\\/#organizationLogo\",\"width\":664,\"height\":225},\"image\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Commands_verwenden\\\/#organizationLogo\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Commands_verwenden\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Andr\\u00e9 Minhorst\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Commands_verwenden\\\/#webpage\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/Commands_verwenden\\\/\",\"name\":\"Commands verwenden - Visual Basic Entwickler\",\"description\":\"Wenn Sie unter Access und VBA Ereignisse programmiert haben, hat beispielsweise jedes Steuer-element, jede Ribbon-Schaltfl\\u00e4che und jeder Kontextmen\\u00fc-Eintrag ein eigenes Ereignis erhalten - auch, wenn diese genau die gleiche Funktion ausl\\u00f6sen sollten. Das war schon durch die unterschiedlichen Schnittstellen n\\u00f6tig. Unter WPF k\\u00f6nnen Sie ein und dieselbe Funktion von verschiedenen Steuerelementen aus ausl\\u00f6sen. Das gelingt allerdings nicht mit herk\\u00f6mmlichen Ereignismethoden, sondern mit sogenannten Commands. Was das ist und wie Sie es in Ihre Anwendungen einbauen k\\u00f6nnen, zeigt der vorliegende Artikel.\",\"inLanguage\":\"de-DE\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Commands_verwenden\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"datePublished\":\"2020-12-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#website\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/\",\"name\":\"Datenbankentwickler\",\"description\":\"Das Magazin f\\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\",\"inLanguage\":\"de-DE\",\"publisher\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Commands verwenden - Visual Basic Entwickler","description":"Wenn Sie unter Access und VBA Ereignisse programmiert haben, hat beispielsweise jedes Steuer-element, jede Ribbon-Schaltfl\u00e4che und jeder Kontextmen\u00fc-Eintrag ein eigenes Ereignis erhalten - auch, wenn diese genau die gleiche Funktion ausl\u00f6sen sollten. Das war schon durch die unterschiedlichen Schnittstellen n\u00f6tig. Unter WPF k\u00f6nnen Sie ein und dieselbe Funktion von verschiedenen Steuerelementen aus ausl\u00f6sen. Das gelingt allerdings nicht mit herk\u00f6mmlichen Ereignismethoden, sondern mit sogenannten Commands. Was das ist und wie Sie es in Ihre Anwendungen einbauen k\u00f6nnen, zeigt der vorliegende Artikel.","canonical_url":"https:\/\/vbentwickler.de\/Commands_verwenden\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/vbentwickler.de\/Commands_verwenden\/#blogposting","name":"Commands verwenden - Visual Basic Entwickler","headline":"Commands verwenden","author":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"publisher":{"@id":"https:\/\/vbentwickler.de\/#organization"},"image":{"@type":"ImageObject","url":"..\/fileadmin\/_temp_\/2020_06\/pic_242_001.png","@id":"https:\/\/vbentwickler.de\/Commands_verwenden\/#articleImage"},"datePublished":"2020-12-01T00:00:00+00:00","dateModified":"-0001-11-30T00:00:00+00:00","inLanguage":"de-DE","mainEntityOfPage":{"@id":"https:\/\/vbentwickler.de\/Commands_verwenden\/#webpage"},"isPartOf":{"@id":"https:\/\/vbentwickler.de\/Commands_verwenden\/#webpage"},"articleSection":"2020, 6\/2020, WPF-Grundlagen"},{"@type":"BreadcrumbList","@id":"https:\/\/vbentwickler.de\/Commands_verwenden\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/vbentwickler.de#listItem","position":1,"name":"Home","item":"https:\/\/vbentwickler.de","nextItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2020\/#listItem","name":"2020"}},{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2020\/#listItem","position":2,"name":"2020","item":"https:\/\/vbentwickler.de\/category\/2020\/","nextItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/Commands_verwenden\/#listItem","name":"Commands verwenden"},"previousItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/Commands_verwenden\/#listItem","position":3,"name":"Commands verwenden","previousItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2020\/#listItem","name":"2020"}}]},{"@type":"Organization","@id":"https:\/\/vbentwickler.de\/#organization","name":"Datenbankentwickler","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","url":"https:\/\/vbentwickler.de\/","logo":{"@type":"ImageObject","url":"https:\/\/vbentwickler.de\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","@id":"https:\/\/vbentwickler.de\/Commands_verwenden\/#organizationLogo","width":664,"height":225},"image":{"@id":"https:\/\/vbentwickler.de\/Commands_verwenden\/#organizationLogo"}},{"@type":"Person","@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author","url":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","@id":"https:\/\/vbentwickler.de\/Commands_verwenden\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","width":96,"height":96,"caption":"Andr\u00e9 Minhorst"}},{"@type":"WebPage","@id":"https:\/\/vbentwickler.de\/Commands_verwenden\/#webpage","url":"https:\/\/vbentwickler.de\/Commands_verwenden\/","name":"Commands verwenden - Visual Basic Entwickler","description":"Wenn Sie unter Access und VBA Ereignisse programmiert haben, hat beispielsweise jedes Steuer-element, jede Ribbon-Schaltfl\u00e4che und jeder Kontextmen\u00fc-Eintrag ein eigenes Ereignis erhalten - auch, wenn diese genau die gleiche Funktion ausl\u00f6sen sollten. Das war schon durch die unterschiedlichen Schnittstellen n\u00f6tig. Unter WPF k\u00f6nnen Sie ein und dieselbe Funktion von verschiedenen Steuerelementen aus ausl\u00f6sen. Das gelingt allerdings nicht mit herk\u00f6mmlichen Ereignismethoden, sondern mit sogenannten Commands. Was das ist und wie Sie es in Ihre Anwendungen einbauen k\u00f6nnen, zeigt der vorliegende Artikel.","inLanguage":"de-DE","isPartOf":{"@id":"https:\/\/vbentwickler.de\/#website"},"breadcrumb":{"@id":"https:\/\/vbentwickler.de\/Commands_verwenden\/#breadcrumblist"},"author":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"creator":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"datePublished":"2020-12-01T00:00:00+00:00","dateModified":"-0001-11-30T00:00:00+00:00"},{"@type":"WebSite","@id":"https:\/\/vbentwickler.de\/#website","url":"https:\/\/vbentwickler.de\/","name":"Datenbankentwickler","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","inLanguage":"de-DE","publisher":{"@id":"https:\/\/vbentwickler.de\/#organization"}}]},"og:locale":"de_DE","og:site_name":"Visual Basic Entwickler - Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","og:type":"article","og:title":"Commands verwenden - Visual Basic Entwickler","og:description":"Wenn Sie unter Access und VBA Ereignisse programmiert haben, hat beispielsweise jedes Steuer-element, jede Ribbon-Schaltfl\u00e4che und jeder Kontextmen\u00fc-Eintrag ein eigenes Ereignis erhalten - auch, wenn diese genau die gleiche Funktion ausl\u00f6sen sollten. Das war schon durch die unterschiedlichen Schnittstellen n\u00f6tig. Unter WPF k\u00f6nnen Sie ein und dieselbe Funktion von verschiedenen Steuerelementen aus ausl\u00f6sen. Das gelingt allerdings nicht mit herk\u00f6mmlichen Ereignismethoden, sondern mit sogenannten Commands. Was das ist und wie Sie es in Ihre Anwendungen einbauen k\u00f6nnen, zeigt der vorliegende Artikel.","og:url":"https:\/\/vbentwickler.de\/Commands_verwenden\/","og:image":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","og:image:secure_url":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","article:published_time":"2020-12-23T15:46:11+00:00","article:modified_time":"-001-11-30T00:00:00+00:00","twitter:card":"summary_large_image","twitter:title":"Commands verwenden - Visual Basic Entwickler","twitter:description":"Wenn Sie unter Access und VBA Ereignisse programmiert haben, hat beispielsweise jedes Steuer-element, jede Ribbon-Schaltfl\u00e4che und jeder Kontextmen\u00fc-Eintrag ein eigenes Ereignis erhalten - auch, wenn diese genau die gleiche Funktion ausl\u00f6sen sollten. Das war schon durch die unterschiedlichen Schnittstellen n\u00f6tig. Unter WPF k\u00f6nnen Sie ein und dieselbe Funktion von verschiedenen Steuerelementen aus ausl\u00f6sen. Das gelingt allerdings nicht mit herk\u00f6mmlichen Ereignismethoden, sondern mit sogenannten Commands. Was das ist und wie Sie es in Ihre Anwendungen einbauen k\u00f6nnen, zeigt der vorliegende Artikel.","twitter:image":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png"},"aioseo_meta_data":{"post_id":"55000242","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2024-01-30 16:12:58","updated":"2026-05-16 08:49:40","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/vbentwickler.de\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/vbentwickler.de\/category\/2020\/\" title=\"2020\">2020<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tCommands verwenden\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/vbentwickler.de"},{"label":"2020","link":"https:\/\/vbentwickler.de\/category\/2020\/"},{"label":"Commands verwenden","link":"https:\/\/vbentwickler.de\/Commands_verwenden\/"}],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000242","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=55000242"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000242\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000242"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000242"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000242"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}