﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>CASIC Ltd.</title><generator>InstantKB.NET 2011-2</generator><description>CASIC Ltd.</description><link>https://kb.casic.eu/</link><webMaster>kb@casic.de</webMaster><lastBuildDate>Tue, 07 Apr 2026 14:53:33 GMT</lastBuildDate><ttl>20</ttl><item><title>Alle Trigger einer Datenbank löschen</title><link>https://kb.casic.eu/Goto10295.aspx</link><description>&lt;p&gt;&lt;strong&gt;Zusammenfassung&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Das nachfolgende Skript löscht sämtliche Trigger einer Datenbank.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Skript&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="float: left; overflow-y: hidden; overflow-x: scroll; width: 95%; background-color: #dedede;"&gt;&lt;pre&gt;&lt;span style="font-size: 11px;"&gt;DECLARE @SQLCmd nvarchar(1000) &lt;br /&gt;DECLARE @Trig varchar(500)&lt;br /&gt;DECLARE @sch varchar(500)&lt;br /&gt;&lt;br /&gt;DECLARE TGCursor CURSOR FOR&lt;br /&gt;&lt;br /&gt;SELECT ISNULL(tbl.name, vue.name) AS [schemaName]&lt;br /&gt;     , trg.name AS triggerName&lt;br /&gt;FROM sys.triggers trg&lt;br /&gt;LEFT OUTER JOIN (SELECT tparent.object_id, ts.name &lt;br /&gt;                 FROM sys.tables tparent &lt;br /&gt;                 INNER JOIN sys.schemas ts ON ts.schema_id = tparent.&lt;span style="font-family: verdana, tahoma, arial;"&gt;schema_id&lt;/span&gt;&lt;span style="font-family: verdana, tahoma, arial;"&gt;) &lt;/span&gt;&lt;br /&gt;                 AS tbl ON tbl.&lt;span style="font-family: verdana, tahoma, arial;"&gt;object_id&lt;/span&gt;&lt;span style="font-family: verdana, tahoma, arial;"&gt; = trg.parent_id&lt;/span&gt;&lt;br /&gt;LEFT OUTER JOIN (SELECT vparent.object_id, vs.name &lt;br /&gt;                 FROM sys.views vparent &lt;br /&gt;                 INNER JOIN sys.schemas vs ON vs.schema_id = vparent.&lt;span style="font-family: verdana, tahoma, arial;"&gt;schema_id&lt;/span&gt;&lt;span style="font-family: verdana, tahoma, arial;"&gt;) &lt;/span&gt;&lt;br /&gt;                 AS vue ON vue.&lt;span style="font-family: verdana, tahoma, arial;"&gt;object_id&lt;/span&gt;&lt;span style="font-family: verdana, tahoma, arial;"&gt; = trg.parent_id&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;OPEN TGCursor&lt;br /&gt;FETCH NEXT FROM TGCursor INTO @sch,@Trig&lt;br /&gt;WHILE @@FETCH_STATUS = 0&lt;br /&gt;BEGIN&lt;br /&gt;&lt;br /&gt;SET @SQLCmd = N'DROP TRIGGER [' + @sch + '].[' + @Trig + ']'&lt;br /&gt;EXEC sp_executesql @SQLCmd&lt;br /&gt;PRINT @SQLCmd&lt;br /&gt;&lt;br /&gt;FETCH next FROM TGCursor INTO @sch,@Trig&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;CLOSE TGCursor&lt;br /&gt;DEALLOCATE TGCursor &lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description><pubDate>Sat, 16 Jan 2016 18:50:55 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Alte mdPROJECTTIMER Versionen</title><link>https://kb.casic.eu/Goto10219.aspx</link><description>Grundsätzlich empfehlen wir den Einsatz der jeweils neuesten Version von mdPROJECTTIMER Pro. &lt;strong&gt;Alle Updates der Version 3.x sind für Sie grundsätzlich kostenlos&lt;/strong&gt;! Leider erfordert manchmal eine neue Version die Erweiterung/Änderung der Datenbankstrukturen – in diesem Fall müssen dann auch alle anderen Arbeitsplätze auf die neue Version aktualisiert werden. Wenn dies nicht gewünscht ist, können Sie Alternativ hierzu das Setup der eingesetzten Version über die nachfolgenden Links herunterladen:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.6.1%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.6.1&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.7.0%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.7.0&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.7.1%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.7.1&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.7.2%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.7.2&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.7.3%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.7.3&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.7.4%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.7.4&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.7.5%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.7.5&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.7.6%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.7.6&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.7.7%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.7.7&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.8.0%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.8.0&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.8.1%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.8.1&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.8.2%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.8.2&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.8.3%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.8.3&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.8.4%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.8.4&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.8.5%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.8.5&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.8.6%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.8.6&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.8.7%20Setup.exe"&gt;mdPROJECTTIMER Pro 3.8.7&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.8.8%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.8.8&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.8.9%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.8.9&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.8.10%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.8.10&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.9.0%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.9.0&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.9.1%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.9.1&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.9.2%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.9.2&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.9.3%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.9.3&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.9.4%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.9.4&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.9.5%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.9.5&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.9.6%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.9.6&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.9.7%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.9.7&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.10.0%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.10.0&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.10.2%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.10.2&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a class="ApplyClass" href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.11.2%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.11.2&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a class="ApplyClass" href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.12.5%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.12.5&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a class="ApplyClass" href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.12.6%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.12.6&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a class="ApplyClass" href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.12.9%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.12.9&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a class="ApplyClass" href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.14.0%20Setup.exe"&gt;&lt;span style="color: #0000ff;"&gt;mdPROJECTTIMER Pro 3.14.0&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;a class="ApplyClass" href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.15.0%20Setup.exe"&gt;mdPROJECTTIMER Pro 3.15.0&lt;/a&gt;&lt;/span&gt;&lt;div&gt;&lt;span style="color: #0000ff;"&gt;&lt;a class="ApplyClass" href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.15.3%20Setup.exe"&gt;mdPROJECTTIMER Pro 3.15.3&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #0000ff;"&gt;&lt;a class="ApplyClass" href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.16.0%20Setup.exe"&gt;mdPROJECTTIMER Pro 3.16.0&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #0000ff;"&gt;&lt;a class="ApplyClass" href="http://download.mdprojecttimer.de/Single/History/mdPROJECTTIMER%20Pro%203.16.1%20Setup.exe"&gt;mdPROJECTTIMER Pro 3.16.1&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Sollte eine andere, hier nicht aufgelistete Version benötigt werden, bitte eine kurze Email an &lt;a href="mailto:info@casic.de"&gt;info@casic.de&lt;/a&gt; senden.&lt;/div&gt;</description><pubDate>Fri, 06 Dec 2013 12:50:21 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Transaktionsprotokoll wächst ständig</title><link>https://kb.casic.eu/Goto10286.aspx</link><description>Das Ganze hängt stark zusammen mit dem eingestellten Datenbanksicherungsmodell. Dieses lässt sich im Microsoft SQL Server Management Studio für eine Datenbank einstellen (Register "Optionen" in den Datenbankeigenschaften). Auf dem vollwertigen SQL-Server ist die Voreinstellung "Vollständig", bei den Express-Editionen "Einfach".&lt;br /&gt;&lt;br /&gt;Unterschiede der beiden Sicherungsmodelle:&lt;br /&gt;&lt;br /&gt;"Einfach" bedeutet, dass eine Datenbankwiederherstellung "nur" anhand des letzten vollständigen Backups gemacht werden kann. In dieser Einstellung werden Einträge in der Transaktionsdatei sofort nach erfolgreicher Ausführung zur Löschung freigegeben.&lt;br /&gt;&lt;br /&gt;"Vollständig" bedeutet, dass die Wiederherstellung anhand der Transaktionsprotokolldatei zu jedem Zeitpunkt erfolgen kann. D.h. eine Wiederherstellung ist auch ohne explizites Backup möglich (solange die Transaktionsprotokolldatei in Ordnung ist). In dieser Einstellung bleiben jedoch alle ausgeführten Aktionen auf der DB solange in der Transaktionsdatei stehen, bis die Transaktionsdatei explizit gesichert wurde. Da dies in den meisten Fällen jedoch so nicht eingerichtet ist, wächst diese Datei kontinuierlich.&lt;br /&gt;&lt;br /&gt;Diese Einstellung lässt sich auch per SQL-Script anpassen:&lt;div&gt;&lt;br /&gt;&lt;span class="Code"&gt;Alter Database [Datenbankname]&lt;br /&gt;Set Recovery Simple&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</description><pubDate>Thu, 15 Nov 2012 15:00:15 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Zyklische Datenbank-Sicherung</title><link>https://kb.casic.eu/Goto10223.aspx</link><description>&lt;p&gt;Leider stehen in den Express-Editionen vom SQL Server 2005/2008 keine Wartungspläne zur Verfügung, mit denen u.a. die zyklische Sicherung von Datenbanken eingerichtet werden kann. Erst die SQL-Server Editionen "Standard" oder höher bringen diese Funktionalität mit. Eine zyklische Sicherung einer SQL Server Express Datenbank kann aber auch mit Windows-Boardmitteln eingerichtet werden.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;1. Backup-Verzeichnis einrichten&lt;/h4&gt;&lt;p&gt;Als erstes muss ein Backup-Verzeichnis eingerichtet werden. Dieses Verzeichnis enthält, neben den Einrichtungsdateien für die zyklische Datenbanksicherung, später auch die erstelle Sicherungsdatei. Das Verzeichnis kann ein beliebiges Verzeichnis auf einem beliebigen lokalen Laufwerk sein (Netzlaufwerke werden nicht unterstützt!) - wir verwenden in der nachfolgenden Beschreibung den Pfad &lt;strong&gt;C:\backup&lt;/strong&gt;. &lt;br /&gt;&lt;/p&gt;&lt;h4&gt;2. SQL-Skript zur Sicherung einer Datenbank anlegen&lt;/h4&gt;&lt;p&gt;Im nächsten Schritt wird ein SQL-Skript erstellt, das eine Sicherungsdatei von einer Datenbank erstellt. Das nachfolgende SQL-Skript können Sie als Vorlage verwenden. Starten Sie den Editor (Notepad) und übertragen Sie nachfolgende Zeilen:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr /&gt;&lt;font color="#0000ff"&gt;USE&lt;/font&gt; master&lt;br /&gt;&lt;font color="#008000"&gt;-- Optional vorhandene Backup-Datei löschen&lt;br /&gt;&lt;font color="#0000ff"&gt;EXEC&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#800000"&gt;sp_dropdevice&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#ff0000"&gt;'mdPROJECTTIMER_bak'&lt;br /&gt;&lt;/font&gt;-- Backup-Datei anlegen&lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;EXEC&lt;/font&gt; &lt;font color="#800000"&gt;sp_addumpdevice&lt;/font&gt; &lt;font color="#ff0000"&gt;'disk'&lt;/font&gt;&lt;font color="#808080"&gt;,&lt;/font&gt; &lt;font color="#ff0000"&gt;'mdPROJECTTIMER_bak'&lt;/font&gt;&lt;font color="#808080"&gt;,&lt;/font&gt;&lt;font color="#ff0000"&gt;'C:\backup\mdPROJECTTIMER.bak'&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000"&gt;-- Datenbank sichern&lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;BACKUP&lt;/font&gt; &lt;font color="#0000ff"&gt;DATABASE&lt;/font&gt; mdPROJECTTIMER &lt;font color="#0000ff"&gt;TO&lt;/font&gt; mdPROJECTTIMER_bak WITH INIT&lt;br /&gt;&lt;hr /&gt;&lt;p&gt;Das obige SQL-Skript geht davon aus, dass die Datenbank &lt;strong&gt;mdPROJECTTIMER&lt;/strong&gt; heißt. Wenn Sie bei der Anlage der Datenbank einen anderen Namen angegeben haben, ersetzen Sie bitte den Namen &lt;strong&gt;mdPROJECTTIMER&lt;/strong&gt; in allen Zeilen durch den von Ihnen festgelegten Namen. Das Skript sichert die Datenbank in die Datei &lt;strong&gt;mdPROJECTTIMER.bak&lt;/strong&gt;, die im Verzeichnis &lt;strong&gt;backup&lt;/strong&gt; auf dem Laufwerk &lt;strong&gt;C:&lt;/strong&gt; angelegt wird. &lt;br /&gt;Speichern Sie das SQL-Skript in die Datei &lt;strong&gt;C:\backup\mdPROJECTTIMER.sql&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;3. Batch-Datei zur Ausführung des SQL-Skripts anlegen&lt;/h4&gt;&lt;p&gt;Im nächsten Schritt erstellen Sie eine Batch-Datei, die das zuvor angelegte SQL-Skript ausführt. Starten Sie den Editor (Notepad) und übertragen Sie folgende Zeile:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr /&gt;sqlcmd.exe -S (local)\CASIC -U sa -P Casic#2005 -i "c:\backup\mdPROJECTTIMER.sql"&lt;br /&gt;copy /Y "c:\backup\mdPROJECTTIMER.bak" "\\FILESERVER\SQLBackups\mdPROJECTTIMER.bak"&lt;br /&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;In der ersten Zeile wird das SQL-Skript ausgeführt, das die Datenbank in eine Datei sichert. Hinter dem Parameter &lt;strong&gt;-S&lt;/strong&gt; geben Sie den SQL-Server-Namen (für den lokalen SQL-Server können Sie auch (local) verwenden) und den Instanz-Namen an. Mit den Parametern &lt;strong&gt;-U&lt;/strong&gt; (Benutzername) und &lt;strong&gt;-P&lt;/strong&gt; (Passwort) geben Sie den Datenbank-Benutzer an. Verwenden Sie hier die gleichen Anmeldedaten (Benutzername und Passwort), die Sie auch im Datenbankverbindungs-Assistenten von mdPROJECTTIMER angegeben haben.&lt;br /&gt;In der zweiten Zeile wird die erstellte Sicherungsdatei &lt;strong&gt;mdPROJECTTIMER.bak&lt;/strong&gt; auf einen anderen Rechner kopiert (im obigen Beispiel auf den Rechner &lt;strong&gt;FILESERVER&lt;/strong&gt; und dort in das Verzeichnis &lt;strong&gt;SQLBackups&lt;/strong&gt;). Passen Sie den Ziel-Rechner und das Ziel-Verzeichnis entsprechend an. Es wird grundsätzlich empfohlen, die auf dem Datenbankserver erstellte Sicherungsdatei auf einen anderen (zweiten) Rechner zu kopieren, damit z.B. nach einem Festplatten-Crash des Datenbankservers immer noch auf eine Datenbanksicherung zugegriffen werden kann!&lt;br /&gt;Speichern Sie die Batch-Datei unter &lt;strong&gt;C:\backup\mdPROJECTTIMER.bat&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;4. Ausführung planen&lt;br /&gt;&lt;/h4&gt;&lt;p&gt;Im letzten Schritt erstellen Sie einen Task (Aufgabe), um die zuvor angelegte Batch-Datei zyklisch auszuführen. Öffnen Sie die Systemsteuerung und klicken Sie auf &lt;strong&gt;Geplante Tasks&lt;/strong&gt; (Vista/7: Systemsteuerung/Verwaltung/Aufgabenplanung). Klicken Sie auf &lt;strong&gt;Geplanten Task hinzufügen&lt;/strong&gt; (Vista/7: Einfache Aufgabe erstellen...). Es erscheint der Assistent zu Anlage der Aufgabe:&lt;br /&gt;&lt;br /&gt;&lt;img src="/KB/Uploads/Images/Task01.PNG" /&gt;&lt;br /&gt;&lt;br /&gt;Klicken Sie auf die Schaltfläche &lt;strong&gt;Weiter&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img src="/KB/Uploads/Images/Task02.PNG" /&gt;&lt;br /&gt;&lt;br /&gt;Klicken Sie auf die Schaltfläche &lt;strong&gt;Durchsuchen&lt;/strong&gt; und wählen Sie anschließend die zuvor erstellte Batchdatei &lt;strong&gt;mdPROJECTTIMER.bat&lt;/strong&gt; aus.&lt;br /&gt;&lt;br /&gt;&lt;img src="/KB/Uploads/Images/Task03.PNG" /&gt;&lt;br /&gt;&lt;br /&gt;Legen Sie fest, wann die Aufgabe ausgeführt werden soll (empfohlen: Täglich)&lt;br /&gt;&lt;br /&gt;&lt;img src="/KB/Uploads/Images/Task04.PNG" /&gt;&lt;br /&gt;&lt;br /&gt;Geben Sie in diesem Schritt die Startzeit ein. Es wird empfohlen, die Datenbanksicherung zu einem Zeitpunkt ausführen zu lassen, in dem möglichst wenig Benutzer die Datenbank verwenden.&lt;br /&gt;&lt;br /&gt;&lt;img src="/KB/Uploads/Images/Task05.PNG" /&gt;&lt;/p&gt;&lt;p&gt;Geben Sie den Windows-Benutzer (nicht zu verwechseln mit dem Datenbank-Benutzer!) an, der zum Starten der Batchdatei verwendet werden soll. Wir empfehlen, hier den lokalen Administrator zu verwenden.&lt;br /&gt;&lt;br /&gt;&lt;img src="/KB/Uploads/Images/Task06.PNG" /&gt;&lt;br /&gt;&lt;br /&gt;Schließen Sie die Einrichtung der Aufgabe mit einem Klick auf die Schaltfläche &lt;strong&gt;Fertig stellen&lt;/strong&gt; ab.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;5. Einrichtung testen&lt;/h4&gt;&lt;p&gt;In der Liste Geplante Tasks erscheint nun die zuvor erstellte Aufgabe. Klicken Sie mit der rechten Maustaste auf den Eintrag &lt;strong&gt;mdPROJECTTIMER&lt;/strong&gt; und wählen Sie im Kontext-Menü den Eintrag &lt;strong&gt;Ausführen&lt;/strong&gt; aus. Überprüfen Sie nach der Ausführung der Batchdatei, ob im Verzeichnis &lt;strong&gt;C:\backup&lt;/strong&gt; die Sicherungsdatei &lt;strong&gt;mdPROJECTTIMER.bak&lt;/strong&gt; erzeugt wurde.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;6. Wichtige Hinweise&lt;/h4&gt;&lt;p&gt;Obwohl die oben beschriebene zyklische Datensicherung in der Regel gut funktioniert, erhalten Sie leider im Fehlerfall keine automatische Benachrichtigung. Es ist daher unerlässlich, immer wieder die korrekte Erstellung der Sicherungsdatei zu überprüfen: Prüfen Sie regelmäßig, ob das Dateidatum der Sicherungsdatei &lt;strong&gt;mdPROJECTTIMER.bak&lt;/strong&gt; (tages-)aktuell ist.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;/p&gt;</description><pubDate>Mon, 10 Jan 2011 22:43:20 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Signierung von Programmen und Setups</title><link>https://kb.casic.eu/Goto10133.aspx</link><description>&lt;p&gt;In diesem Dokument wird die Signierung von Programme/Bibliotheken und Setups beschrieben, sowie alle hierzu notwendigen Tools, Dateien und Zertifikate.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Signierung von InstallAware-Setups&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;Zum Signieren von InstallAware-Setups werden keine weiteren Tools benötigt - InstallAware hat die Signierung der Setups vollständig integriert. In der Design-Ansicht unter dem Punkt "Deployment/Authenticode Signature" kann die Signierung aktiviert werden:&lt;br /&gt;&lt;br /&gt;&lt;img style="BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; WIDTH: 438px; HEIGHT: 375px; BORDER-RIGHT-COLOR: #000000; BORDER-LEFT-COLOR: #000000" border="2" src="/KB/Uploads/Images/InstallAware_Signierung.png" /&gt;&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;a href="http://www.installaware.com/"&gt;http://www.installaware.com&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;font size="3"&gt;&lt;strong&gt;Programme/Tools zum Signieren von Programmen&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;Zum Signieren von Programmen und Bibliotheken werden einige Tools und Dateien aus dem Microsoft Platform SDK for Windows Server 2003 R2 benötigt:&lt;br /&gt;– signtool.exe&lt;br /&gt;– pvk2pfx.exe&lt;br /&gt;– CapiCom.Dll&lt;br /&gt;Die benötigten Tools und Dateien stehen im Anhang als ZIP-Archiv zur Verfügung (Tools.zip). Damit lassen sich unter Windows XP SP2 / Windows Vista (andere Plattformen habe ich nicht getestet) Programme und Bibliotheken signieren, ohne das Microsoft Platform SDK installieren zu müssen. Für die Signierung von InstallAware-Setups werden diese Tools nicht benötigt.&lt;/p&gt;&lt;p&gt;Links:&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=0BAF2B35-C656-4969-ACE8-E4C0C0716ADB&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=0BAF2B35-C656-4969-ACE8-E4C0C0716ADB&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;font size="3"&gt;&lt;strong&gt;Signierung von Programmen und Bibliotheken&lt;br /&gt;&lt;/strong&gt;&lt;/font&gt;Wenn die Personal Information Exchange Datei (*.pfx) zur Verfügung steht, können Programme und Bibliotheken signiert werden. Hierzu kann das Tool signtool.exe aus dem Microsoft Platform SDK for Windows Server 2003 R2 verwendet werden:&lt;/p&gt;&lt;p&gt;&lt;font style="BACKGROUND-COLOR: #dddddd"&gt;signtool.exe sign /f "C:\Demo.pfx" /p "pfxPasswort" /t "&lt;/font&gt;&lt;a href="http://timestamp.comodoca.com/authenticode"&gt;&lt;font style="BACKGROUND-COLOR: #dddddd"&gt;http://timestamp.comodoca.com/authenticode&lt;/font&gt;&lt;/a&gt;&lt;font style="BACKGROUND-COLOR: #dddddd"&gt;" "F:\SOURCE_20\Test - Signierung\Projekt1.exe"&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;Der letzte Parameter ("F:\SOURCE_32\Test - Signierung\Projekt1.exe") gibt den vollständigen Pfad Dateinamen der zu signierenden Datei an (*.exe, *.dll oder *.ocx).&lt;/p&gt;&lt;p&gt;Tipp: Grundsätzlich sollte immer der vollständige Pfad Dateinamen in zwei doppelten Anführungszeichen angegeben werden!&lt;/p&gt;&lt;p&gt;Wichtig: Es muss das Passwort der *.pfx-Datei beim Parameter /p angegeben werden (nicht zu verwechseln mit dem Passwort für den privaten Schlüssel!).&lt;/p&gt;&lt;p&gt;Links:&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/de-de/library/8s9b9yaz(vs.80).aspx"&gt;http://msdn2.microsoft.com/de-de/library/8s9b9yaz(vs.80).aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;&lt;br /&gt;Vorbereitung zur Signierung&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;Wenn das Unternehmens-Zertifikat vorliegt (*.spc), muss zunächst noch eine Personal Information Exchange Datei (*.pfx) erzeugt werden, bevor mit der Signierung begonnen werden kann. Um eine Personal Information Exchange Datei (*.pfx) zu erzeugen, kann das Tool pvk2pfx.exe aus dem Microsoft Platform SDK for Windows Server 2003 R2 verwendet werden:&lt;/p&gt;&lt;p&gt;&lt;font style="BACKGROUND-COLOR: #dddddd"&gt;pvk2pfx.exe -pvk "C:\Demo.pvk" -pi "pvkPasswort" -spc "C:\Demo.spc" -pfx "C:\Demo.pfx" -po "pfxPasswort" -f&lt;/font&gt;&lt;/p&gt;&lt;p&gt;Die erstellte Personal Information Exchange Datei (Demo.pfx) erhält das neue Passwort "pfxPasswort" (es wird von Microsoft empfohlen, für diese Datei ein anderes Passwort zu verwenden als für die private Schlüssel-Datei).&lt;/p&gt;&lt;p&gt;Links:&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa906332.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa906332.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;font size="3"&gt;Anforderung Unternehmens-Zertifikat&lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;Ein Unternehmens-Zertifikat kann z.B. bei VeriSign, COMODO usw. angefordert werden. Wir verwenden ein Unternehmens-Zertifikat von COMODO (günstigster Anbieter). Direkt bei der Bestellung erhält man eine Datei, die den privaten Schlüssel enthält (*.pvk) und die mit dem zuvor angegebenen Passwort geschützt ist (pvkPasswort). Nach der Verfikation durch den Anbieter erhält man von diesem das Unternehmens-Zertifikat (*.spc). Beide Dateien werden für die Erstellung einer Personal Information Exchange Datei (*.pfx) benötigt (siehe Vorbereitung zur Signierung). &lt;/p&gt;&lt;p&gt;Links:&lt;br /&gt;&lt;a href="http://www.instantssl.com/code-signing/code-signing.html"&gt;http://www.instantssl.com/code-signing/code-signing.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;</description><pubDate>Thu, 24 Sep 2009 15:26:58 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Anmeldung automatisieren</title><link>https://kb.casic.eu/Goto10191.aspx</link><description>&lt;p&gt;&lt;strong&gt;Allgemein&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Die Anmeldung an mdPROJECTTIMER Pro auf einem Computer automatisieren, indem der Computername und der Windows-Benutzername dem Mitarbeiter hinterlegt werden.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Betrifft&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;mdPROJECTTIMER Pro 3.x &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Vorgehensweise &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;Zuerst muss der Computername und der Windows-Benutzername ermittelt werden. Hierzu gibt es mehrere Möglichkeiten (z.B. Systemsteuerung...) - Am Einfachsten geht es mit dem kleinen Tool LoginInfo.exe, das in den Anlagen heruntergeladen werden kann (verwenden Sie die Zip-Datei, wenn Ihre Firewall die Exe-Datei blocken sollte). Nach dem Starten wird der Benutzer- und Computername angezeigt:&lt;br /&gt;&lt;br /&gt;&lt;img src="/KB/Uploads/Images/LoginInfo_Dialog.PNG" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Starten Sie nun mdPROJECTTIMER und öffnen Sie die Mitarbeiter-Verwaltung (Menü "Stammdaten" / Eintrag "Mitarbeiter..."). Wählen Sie in der Liste den Mitarbeiter aus, der sich auf diesem Computer automatisch anmelden soll. Klicken Sie auf die Schaltfläche "Ändern":&lt;br /&gt;&lt;br /&gt;&lt;img src="/KB/Uploads/Images/LoginInfo_AutomateLogin.PNG" /&gt; &lt;br /&gt;&lt;br /&gt;Tragen Sie nun in die Felder "Windows Benutzer" und "Computer-Name" die mit dem Tool ermittelten Daten ein und klicken Sie abschließend auf die Schaltfläche "Speichern". Wenn Sie mdPROJECTTIMER das nächste mal auf diesem Computer starten, werden Sie automatisch mit dem ausgewählten Mitarbeiter angemeldet. Der Login-Dialog wird nicht mehr angezeigt.&lt;br /&gt;&lt;/p&gt;</description><pubDate>Thu, 09 Jul 2009 12:36:56 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>SQL-Server: Sichern der mdPROJECTTIMER-Datenbank</title><link>https://kb.casic.eu/Goto10123.aspx</link><description>&lt;p&gt;Dieser Artikel beschreibt, wie Sie mit Hilfe der Software "Microsoft SQL Server Management Studio Express" die mdPROJECTTIMER Datenbank auf einem SQL-Server sichern. Die Software "Microsoft SQL Server Management Studio Express" wird automatisch mit unserem &lt;a href="http://www.mdprojecttimer.de/Downloads.aspx"&gt;SQL-Server 2005 Express Setup&lt;/a&gt; installiert. Wenn Sie noch die ältere MSDE 2000 einsetzen, können Sie das &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=de&amp;amp;FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796"&gt;Management Studio Express bei Microsoft&lt;/a&gt; herunterladen.&lt;/p&gt;&lt;p&gt;Zum Sichern der mdPROJECTTIMER Datenbank führen Sie folgende Schritte aus:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. Starten Sie die Software "Microsoft SQL Server Management Studio Express"&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2. Melden Sie sich am lokalen SQL-Server an&lt;/strong&gt;&lt;br /&gt;Wählen Sie entweder via NT-Authentifizierung oder die Anmeldung mit dem Standard-Datenbankbenutzer "sa". Aktivieren Sie die Option "Kennwort speichern" um bei der nächsten Anmeldung das Passwort nicht erneut eingeben zu müssen.&lt;br /&gt;&lt;br /&gt;&lt;img src="/KB/Uploads/Images/SQLManager1.png" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3. Klappen Sie im Objekt-Explorer (linke Strukturansicht) den Knoten "Datenbanken" auf&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="/KB/Uploads/Images/SQLManager2.png" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4. Klicken Sie mit der rechten Maustaste auf die mdPROJECTTIMER-Datenbank&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5. Wählen Sie im darauf erscheinenden Kontext-Menü den Eintrag "Tasks" / "Sichern…" aus&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="/KB/Uploads/Images/SQLManager3.png" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;6. Es erscheint der Konfigurations-Dialog zum Sichern der Datenbank&lt;br /&gt;&lt;/strong&gt;Übernehmen Sie die Einstellungen der Bereiche "Quelle" und "Sicherungssatz", wie nachfolgend dargestellt. Enthält die Liste im Bereich "Ziel" bereits einen Eintrag, können Sie diesen verwenden, um die bestehende Datenbank-Sicherungsdatei zu aktualisieren. Überspringen Sie in diesem Fall den Punkt 7.&lt;/p&gt;&lt;p&gt;&lt;img src="/KB/Uploads/Images/SQLManager4.png" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;7. Klicken Sie in der Gruppe "Ziel" auf die Schaltfläche "Hinzufügen"&lt;/strong&gt;&lt;br /&gt;Geben Sie dann die zu erstellende Datensicherungs-Datei an (diese sollte die Extension ".bak" haben). &lt;/p&gt;&lt;p&gt;&lt;strong&gt;8. Klicken Sie abschließend auf die Schaltfläche "OK"&lt;/strong&gt;&lt;br /&gt;Die Datensicherung wird jetzt durchgeführt. Wenn die Datensicherung abgeschlossen ist, erscheint eine kurze Meldung und der Dialog "Datenbank sichern - ..." wird geschlossen&lt;/p&gt;&lt;p&gt; &lt;/p&gt;</description><pubDate>Wed, 01 Jul 2009 13:20:39 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Registrierungs-/Lizenz-Daten lassen sich nicht aktualisieren</title><link>https://kb.casic.eu/Goto10050.aspx</link><description>&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Die bereits eingegebenen Registrierungs-Daten (bzw. Lizenz-Daten) lassen sich nicht aktualisieren. Es wurde zum Beispiel eine Test-Lizenz registriert, diese kann jetzt aber nicht mit einer Voll-Lizenz aktualisiert werden.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Hintergrund&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Sämtliche Lizenz-Informationen werden in der Windows-Registry gespeichert. Wird mdPROJECTTIMER Pro direkt nach der Installation vom Setup ausgeführt, wird mdPROJECTTIMER Pro eventuell im Kontext des System-Accounts ausgeführt. Dies hat zur Folge, dass die Lizenz-Informationen in den Zweig HKEY_LOCAL_MACHINE geschrieben werden, obwohl der Benutzer standardmäßig keinen Zugriff auf diesen Registry-Zweig hat (z.B. unter Windows Vista).&lt;/p&gt;&lt;p&gt;mdPROJECTTIMER Pro überprüft beim Schreiben in die Windows Registry, ob der aktuell angemeldete Benutzer Schreibrechte für den Registry-Zweig HKEY_LOCAL_MACHINE besitzt. Ist dies der Fall, werden die Lizenz-Informationen in den Zweig [HKEY_LOCAL_MACHINE\SOFTWARE\mdTOOLS\Fullversion\mdPROJECTTIMER Pro] geschrieben. Bei fehlender Berechtigung werden die Lizenz-Informationen in den Registry-Zweig [HKEY_CURRENT_USER\SOFTWARE\mdTOOLS\Fullversion\mdPROJECTTIMER Pro] geschrieben.&lt;/p&gt;&lt;p&gt;Beim Auslesen der Lizenz-Informationen sucht mdPROJECTTIMER Pro zuerst im Registry-Zweig HKEY_LOCAL_MACHINE. Konnten dort keine Lizenz-Informationen gefunden werden, wird im Registry-Zweig HKEY_CURRENT_USER nach Lizenz-Informationen gesucht.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lösung 1&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Melden Sie sich mit einem Benutzer-Konto an, das über Schreibrechte in den Registry-Zweig HKEY_LOCAL_MACHINE verfügt (in der Regel das Administratoren-Konto)&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Starten Sie mdPROJECTTIMER Pro&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Geben Sie die neuen Lizenz-Daten ein (Menü [Hilfe], Menüpunkt [Registrieren...])&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Lösung 2&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Melden Sie sich mit einem Benutzer-Konto an, das über Schreibrechte in den Registry-Zweig HKEY_LOCAL_MACHINE verfügt (in der Regel das Administratoren-Konto)&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Starten Sie den Windows Registrierungs-Editor ([Start]-Schaltfläche anklicken, Eintrag [Ausführen] im Startmenü auswählen, "RegEdit" im Dialog "Ausführen" eingeben, [OK] anklicken)&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Gehen Sie in den Registry-Zweig [HKEY_LOCAL_MACHINE\SOFTWARE\mdTOOLS\Fullversion\mdPROJECTTIMER Pro] (unter Vista 64-Bit: [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\mdTOOLS\Fullversion\mdPROJECTTIMER Pro])&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Löschen Sie die Einträge "InstallKey" und "Name". Den Eintrag "InstallPath" bitte stehen lassen - dieser wird vom Installations-Programm verwendet.&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Beenden Sie den Windows Registrierungs-Editor&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Starten Sie mdPROJECTTIMER Pro&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Geben Sie die neuen Lizenz-Daten ein (Menü [Hilfe], Menüpunkt [Registrieren...])&lt;/li&gt;&lt;/ol&gt;&lt;p&gt; &lt;/p&gt;</description><pubDate>Fri, 29 May 2009 15:35:18 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Rechnerabsturz, Konfigurationsdatei "mdPROJECTTIMER.bcf" kann nicht mehr geladen werden</title><link>https://kb.casic.eu/Goto10059.aspx</link><description>&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Nach einem Rechnerabsturz gibt mdPROJECTTIMER die Fehlermeldung aus, dass die Konfigurationsdatei "...\mdPROJECTTIMER.bcf" nicht geladen werden kann.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Ursache:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Wenn der Rechner während eines Schreibvorgangs in die Konfigurationsdatei "mdPROJECTTIMER.bcf" abstürzt, kann diese eventuell nicht vollständig geschrieben werden. mdPROJECTTIMER erkennt beim nächsten Start, dass die Konfigurationsdatei defekt ist und gibt eine entsprechende Fehlermeldung aus.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lösung:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Löschen Sie die Konfigurationsdatei "mdPROJECTTIMER.bcf". Die Konfigurationsdatei enthält, neben den Verbindungsdaten zur Datenbank, ausschließlich Computer-spezifische Daten, wie z.B. Fensterpositionen, Listen-Layouts, usw. &lt;strong&gt;&lt;font color="#dd1111"&gt;Durch das Löschen der Konfigurations-Datei gehen keine Stempelungen verloren!&lt;/font&gt;&lt;/strong&gt; Die Datei befindet sich im Verzeichnis:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;XP&lt;/strong&gt;: C:\Dokumente und Einstellungen\&lt;strong&gt;[Benutzername]&lt;/strong&gt;\Anwendungsdaten\mdPROJECTTIMER&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Vista&lt;/strong&gt;: C:\Users\&lt;strong&gt;[Benutzername]&lt;/strong&gt;\AppData\Roaming\mdPROJECTTIMER&lt;/p&gt;&lt;p&gt;Bitte ersetzen Sie &lt;strong&gt;[Benutzername]&lt;/strong&gt; durch Ihren Benutzernamen. Sollten Sie im Windows-Explorer den Ordner "Anwendungsdaten" nicht sehen, müssen Sie die Ansicht auf geschützte Ordner in den Ordneroptionen freischalten:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;XP&lt;/strong&gt;: Starten Sie den Windows-Explorer. Klicken Sie im Windows-Explorer auf das Menü "Extras". Wählen Sie den Menü-Eintrag "Ordneroptionen..." aus. Wechseln Sie in das Register "Ansicht". Aktivieren Sie die Option "Alle Dateien und Ordner anzeigen". Schließen Sie den Dialog mit einem Klick auf die "OK"-Schaltfläche.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Vista&lt;/strong&gt;: Starten Sie den Windows-Explorer: Drücken Sie die ALT-Taste - es erscheint die Menüzeile. Klicken Sie auf das Menü "Extras". Wählen Sie den Menü-Eintrag "Ordneroptionen..." aus. Wechseln Sie in das Register "Ansicht". Aktivieren Sie die Option "Alle Dateien und Ordner anzeigen". Schließen Sie den Dialog mit einem Klick auf die "OK"-Schaltfläche.&lt;/p&gt;</description><pubDate>Fri, 29 May 2009 15:34:19 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>InstallAware 9 Übersetzungen nutzen</title><link>https://kb.casic.eu/Goto10147.aspx</link><description>Die mit InstallAware 9 mitgelieferten Vorübersetzungen können auch mit dem &lt;strong&gt;Translation Manager Pro&lt;/strong&gt; verwendet werden. Hierzu müssen nur die mit InstallAware mitgelieferten Dateien in das Verzeichnis der benutzerdefinierten Übersetzungen von &lt;strong&gt;Translation Manager Pro&lt;/strong&gt; kopiert (und umbenannt) werden:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Öffnen Sie im Windows-Explorer das Installationsverzeichnis von InstallAware 9 (z.B. C:\Programme\InstallAware\InstallAware 9). In diesem befinden sich die Vorübersetzungsdateien. Je Sprache gibt es eine Datei, die mit &lt;strong&gt;reference.&lt;/strong&gt; beginnt (z.B. reference.German).&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Lokalisieren Sie in einem neuen Windows-Explorer-Fenster das Verzeichnis, in dem &lt;strong&gt;Translation Manager Pro&lt;/strong&gt; die benutzerdefinierte Übersetzungen verwaltet. Dieses befindet sich in den lokalen Anwendungsdaten und heißt &lt;strong&gt;Translation Manager Pro for InstallAware&lt;/strong&gt;:&lt;br /&gt; &lt;br /&gt;C:\Dokumente und Einstellungen\&lt;strong&gt;[Benutzername]&lt;/strong&gt;\Anwendungsdaten\Translation Manager Pro for InstallAware&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Je Sprache müssen nun jeweils zwei Dateien (Ursprungstexte+Übersetzungen) aus dem InstallAware-Verzeichnis ins Translation Manager Pro-Verzeichnis kopiert und anschließend umbenannt werden. Die Datei &lt;strong&gt;reference.Original&lt;/strong&gt; enthält die Ursprungstexte und muss nach dem Kopieren in &lt;strong&gt;[Sprache].source&lt;/strong&gt; umbenannt werden. Die Datei &lt;strong&gt;reference.[Sprache]&lt;/strong&gt; enthält die zugehörigen Übersetzungen und muss nach dem Kopieren in &lt;strong&gt;[Sprache].translation&lt;/strong&gt; umbenannt werden. InstallAware verwaltet für alle Sprachen nur eine einzige Datei für die Ursprungstexte - &lt;strong&gt;Translation Manager Pro&lt;/strong&gt; verwaltet je Sprache jeweils eine Datei für die Ursprungstexte und eine Datei für die Übersetzungen (somit können unterschiedlich viele Übersetzungen je Sprache verwaltet werden).&lt;br /&gt;&lt;br /&gt;Beispiel: Umbenennung nach dem Kopiervorgang für die Sprache Deutsch:&lt;br /&gt;&lt;br /&gt;reference.Original -&gt; German.source&lt;br /&gt;reference.German -&gt; German.translation&lt;/li&gt;&lt;/ol&gt;&lt;p&gt; &lt;/p&gt;</description><pubDate>Fri, 29 May 2009 14:42:47 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Ereignisse komfortabel deklarieren</title><link>https://kb.casic.eu/Goto10099.aspx</link><description>&lt;P&gt;Das Definieren von C#-Ereignissen erfordert einen hohen Eingabeaufwand. Um diesen zu reduzieren, stellen wir Ihnen hier ein Makro für Visual Studio 2008 zur Verfügung. Das Makro erzeugt den Source-Code eines C#-Ereignisses an der aktuellen Cursor-Position. Nach dem Starten des Makros werden Sie nach dem Namen und einer Beschreibung des Ereignisses gefragt. Ausserdem können Sie wählen, ob das zu erstellende C#-Ereignis über Standard-Argumente oder benutzerdefinierte Argumente verfügen soll.&lt;/P&gt;&lt;P&gt;Ereignisse können nur direkt in Klassen (nicht innerhalb von Methoden, Eigenschaften...) eingefügt werden. Die korrekte Position des Cursors wird vor dem Einfügen geprüft. Die Klasse für die benutzerdefinierten Argumenten sowie der dazugehörige Delegat wird &lt;STRONG&gt;nach&lt;/STRONG&gt; der aktuellen Klasse erzeugt.&lt;/P&gt;&lt;P&gt;Zur Installation des Makros kopieren Sie einfach den nachfolgenden Quellcode in ein neues oder bestehendes Makro-Modul, das Sie über den Makro-Explorer erreichen:&lt;/P&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Prozedur zum komfortablen Einfügen eines C#-Ereignisses (VS2008)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Sub&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; InsertEvent()&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; eventName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; eventDescription &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; eventHandler &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; eventArgs &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; className &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; ret &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; MsgBoxResult&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; txt &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; TextDocument&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; edit &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; EditPoint&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; start &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; EditPoint&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; classEndPoint &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; TextPoint&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; lineText &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' Prüfen, ob wir aktuell ein Text-Fenster haben&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; If&lt;/FONT&gt;&lt;FONT size=2&gt; DTE.ActiveDocument.Type &amp;lt;&amp;gt; &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Text"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;  MsgBox(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"In diesem Fenster kann kein Ereignis hinzugefügt werden, da dieses Fenster kein Text-Fenster ist"&lt;/FONT&gt;&lt;FONT size=2&gt;, MsgBoxStyle.Critical, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Fehler"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' Name des Ereignisses abfragen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; eventName = InputBox(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"Name des Ereignisses:"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Ereignis-Name festlegen"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"ValueChanged"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; If&lt;/FONT&gt;&lt;FONT size=2&gt; eventName = &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;""&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Exit&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' Beschreibung des Ereignisses abfragen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; eventDescription = InputBox(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"Beschreibung des Ereignisses:"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Ereignis-Beschreibung festlegen"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Dieses Ereignis wird ausgelöst, sobald sich der Wert ändert."&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' Prüfen, ob wir einen eigenen EventHandler verwenden wollen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; ret = MsgBox(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"Wollen Sie für das Ereignis einen eigenen EventHandler mit eigenen Ereignisparametern erzeugen?"&lt;/FONT&gt;&lt;FONT size=2&gt;, MsgBoxStyle.Question &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Or&lt;/FONT&gt;&lt;FONT size=2&gt; MsgBoxStyle.YesNo, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Eigener EventHandler?"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; If&lt;/FONT&gt;&lt;FONT size=2&gt; ret = MsgBoxResult.Yes &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;  ' Eigenen Eventhandler definieren&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;  eventHandler = eventName + &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT face="Courier New"&gt;"EventHandler"&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;  eventArgs = eventName + &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT face="Courier New"&gt;"EventArgs"&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt; Else&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;  eventHandler = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT face="Courier New"&gt;"EventHandler"&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;  eventArgs = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT face="Courier New"&gt;"EventArgs"&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' Die aktuelle Position des Cursors ermitteln und die Textbearbeitung vorbereiten&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; txt = DTE.ActiveDocument.Object&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit = txt.StartPoint.CreateEditPoint()&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.MoveToLineAndOffset(txt.Selection.ActivePoint.Line, 1)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt; ' Wir müssen uns den Startpunkt merken, um abschließend den eingefügten Block zu formatieren&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; start = edit.CreateEditPoint()&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' Namen der aktuellen Klasse ermitteln&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; className = edit.CodeElement(vsCMElement.vsCMElementClass).Name()&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; classEndPoint = edit.CodeElement(vsCMElement.vsCMElementClass).EndPoint&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' Prüfen, ob sich der Cursor innerhalb einer Klasse befindet&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; If&lt;/FONT&gt;&lt;FONT size=2&gt; edit.CodeElement(vsCMElement.vsCMElementClass).Kind &amp;lt;&amp;gt; vsCMElement.vsCMElementClass &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;  MsgBox(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"Bitte setzen Sie vor dem Einfügen eines Ereignisses den Cursor in die Klasse."&lt;/FONT&gt;&lt;FONT size=2&gt;, MsgBoxStyle.Critical, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Achtung"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;  Exit&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' In der UNDO-Liste einen Eintrag erstellen für alles, was wir nachfolgend einfügen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; If&lt;/FONT&gt;&lt;FONT size=2&gt; DTE.UndoContext.IsOpen &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;  DTE.UndoContext.Close()&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; DTE.UndoContext.Open(eventName + &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"-Ereignis"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' Kopf einfügen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; edit.Insert(vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.LineUp()&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"#region "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventName + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"-Ereignis"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' Beschreibung des Events setzen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; If&lt;/FONT&gt;&lt;FONT size=2&gt; eventDescription.Length &amp;gt; 0 &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// &amp;lt;summary&amp;gt;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// "&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + eventDescription + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// &amp;lt;/summary&amp;gt;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' Attribute setzen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"[Browsable(true)]"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; If&lt;/FONT&gt;&lt;FONT size=2&gt; eventDescription.Length &amp;gt; 0 &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"[Description("""&lt;/FONT&gt;&lt;FONT size=2&gt; + eventDescription + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;""")]"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' Event&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"public event "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventHandler + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;" "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventName + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;";"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' Aufruf&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// &amp;lt;summary&amp;gt;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"/// Löst das "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventName + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"-Ereignis aus."&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// &amp;lt;/summary&amp;gt;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"protected virtual void On"&lt;/FONT&gt;&lt;FONT size=2&gt; + eventName + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"("&lt;/FONT&gt;&lt;FONT size=2&gt; + eventArgs + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;" e)"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"{"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;" if ("&lt;/FONT&gt;&lt;FONT size=2&gt; + eventName + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;" != null)"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;" "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventName + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"(this,e);"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"}"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' Fuss einfügen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"#endregion"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' Eingefügten Bereich noch nach den aktuellen Spracheinstellungen formatieren&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; edit.SmartFormat(start)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' Eventuell eigene Ereignis-Parameter definieren (nach der Klasse!)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; If&lt;/FONT&gt;&lt;FONT size=2&gt; ret = MsgBoxResult.Yes &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;  ' Auf das Ende der Klasse positionieren&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;  edit.MoveToLineAndOffset(classEndPoint.Line, 1)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;  ' Wir müssen uns den Startpunkt merken, um abschließend den eingefügten Block zu formatieren&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;  start = edit.CreateEditPoint()&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;  ' Jetzt nach der Klasse die Definition der Parameter-Klasse und des Delegaten einfügen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;  edit.EndOfLine()&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"#region "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventName + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"-Ereignis (Parameter-Klasse und Delegat)"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// &amp;lt;summary&amp;gt;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"/// Definiert die Argumente für das "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventName + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"-Ereignis."&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// &amp;lt;/summary&amp;gt;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"public class "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventArgs + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;" : EventArgs"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"{"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;" // TODO: Ereignis-Parameter für "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventName + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;" definieren"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;" private string a;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;" private string b;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"}"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// &amp;lt;summary&amp;gt;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"/// Delegat für das "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventName + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"-Ereignis."&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// &amp;lt;/summary&amp;gt;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"public delegate void "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventHandler + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"(object sender, "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventArgs + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;" e);"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"#endregion"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;  ' Eingefügten Bereich noch nach den aktuellen Spracheinstellungen formatieren&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;  edit.SmartFormat(start)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' UNDO-Eintrag abschließen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; DTE.UndoContext.Close()&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt; ' Fertig !&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;</description><pubDate>Fri, 16 May 2008 12:36:00 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Datenbank-Sicherung erstellen</title><link>https://kb.casic.eu/Goto10085.aspx</link><description>&lt;P&gt;Mit dem nachfolgenden SQL-Skript wird die Datenbank 'mdPROJECTTIMER' in eine Backup-Datei gesichert. Dies funktioniert analog natürlich auch mit allen anderen Datenbanken:&lt;/P&gt;&lt;FONT color=#0000ff&gt;&lt;P&gt;USE&lt;/FONT&gt; master&lt;BR&gt;&lt;FONT color=#008000&gt;-- Optional vorhandene Backup-Datei löschen&lt;BR&gt;&lt;FONT color=#0000ff&gt;EXEC&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;FONT color=#800000&gt;sp_dropdevice&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000&gt;'mdPROJECTTIMER_bak'&lt;BR&gt;&lt;/FONT&gt;-- Backup-Datei anlegen&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;EXEC&lt;/FONT&gt; &lt;FONT color=#800000&gt;sp_addumpdevice&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;'disk'&lt;/FONT&gt;&lt;FONT color=#808080&gt;,&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;'mdPROJECTTIMER_bak'&lt;/FONT&gt;&lt;FONT color=#808080&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;'D:\backup\mdPROJECTTIMER.bak'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;-- Datenbank sichern&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;BACKUP&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;DATABASE&lt;/FONT&gt; mdPROJECTTIMER &lt;FONT color=#0000ff&gt;TO&lt;/FONT&gt; mdPROJECTTIMER_bak&lt;/P&gt;&lt;P&gt; &lt;/P&gt;</description><pubDate>Mon, 17 Mar 2008 11:51:00 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Patch-Setup funktioniert nicht (immer)</title><link>https://kb.casic.eu/Goto10073.aspx</link><description>&lt;P&gt;&lt;STRONG&gt;Problem&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Werden mehrere Patch-Setups zu einem vollständigen Setup erstellt, funktioniert die Patch-Installation ab dem zweiten Patch-Setup nur noch, wenn die Basis-Installation ohne Patch aktualisiert wird, ansonsten erhält man die Fehlermeldung: "Die Installation von [ProductName] ist fehlgeschlagen: Das Updatepatch kann nicht vom Windows-Installationsdienst aktualisiert werden, da das zu aktualisierende Programm nicht vorhanden ist oder eine andere Version des Programms mit dem Patch aktualisiert wird. Überprüfen Sie, ob das zu aktualisierende Programm vorhanden ist und das richtige Updatepatch verwendet wird.".&lt;/P&gt;&lt;P&gt;Beispiel, wann der Fehler auftritt:&lt;/P&gt;&lt;P&gt;Basis-Installation + Patch 1 + Patch 2&lt;/P&gt;&lt;P&gt;Beispiel, wann der Fehler nicht auftritt:&lt;/P&gt;&lt;P&gt;Basis-Installation + Patch 2&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Ursache&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Werden mehrere Patch-Setups zu einem vollständigen Setup erstellt, spielt die "Product Version" eine Rolle (warum, weiß ich leider auch nicht), wenn auf dem zu installierenden Rechner eine Basis-Installation + einem vorhergehenden Patch bereits vorhanden ist &lt;STRONG&gt;und&lt;/STRONG&gt; die "Product Version" des Patch-Setups unterschiedlich zu der des vollständigen Setups ist.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Lösung&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Die "Product Version" (InstallAware Design-Ansicht / Application Information / Project Properties) nur beim Build eines vollständigen Setups ändern. Wird ein Patch-Setup erstellt, muss die "Product Version" identisch mit der des vollständigen Setups sein.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Anmerkung&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Nicht vergessen: Immer alle Patch-Referenzen (Vollständiges Setup + alle Patch-Setups) im "Deployment / Patches"-Bereich angeben.&lt;/P&gt;</description><pubDate>Wed, 06 Feb 2008 18:03:00 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Ermittlung der Anzahl von Tagen bis zum nächsten Geburtstag</title><link>https://kb.casic.eu/Goto10068.aspx</link><description>&lt;P&gt;Mit dem nachfolgenden SQL-Fragment kann die Anzahl von Tagen bis zum nächsten Geburtstag ermittelt werden (in der Spalte [Birthday] ist das Geburtsdatum hinterlegt):&lt;/P&gt;&lt;P&gt;&lt;FONT face="Courier New"&gt;(CASE WHEN DateAdd(yyyy, DateDiff(yyyy, [Birthday], GetDate()), [Birthday]) &amp;lt;= GetDate() THEN  &lt;BR&gt;DateDiff(d, GetDate(), DateAdd(yyyy, DateDiff(yyyy, [Birthday], GetDate()) + 1, [Birthday])) ELSE  &lt;BR&gt;DateDiff(d, GetDate(), DateAdd(yyyy, DateDiff(yyyy, [Birthday], GetDate()), [Birthday]))&lt;BR&gt;END) AS DaysToBirthday&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;Möchte man auch die Geburtstage, die in den letzten 3 Tagen stattgefunden haben, kann folgendes SQL-Fragment als WHERE-Bedingung verwendet werden:&lt;/P&gt;&lt;P&gt;&lt;FONT face="Courier New"&gt;((CASE WHEN DateAdd(yyyy , DateDiff(yyyy , [Birthday] , DateAdd(d, -4, GetDate())) , [Birthday]) &amp;lt;= DateAdd(d, -4, GetDate()) THEN &lt;BR&gt;DateDiff(d , DateAdd(d, -4, GetDate()) , DateAdd(yyyy , DateDiff(yyyy , [Birthday] , DateAdd(d, -4, GetDate())) + 1 , [Birthday])) ELSE&lt;BR&gt;DateDiff(d , DateAdd(d, -4, GetDate()) , DateAdd(yyyy , DateDiff(yyyy , [Birthday] , DateAdd(d, -4, GetDate())) , [Birthday]))&lt;BR&gt;END)-4) &amp;lt; 4&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;Der "Trick" der obigen WHERE-Bedingung besteht darin, das zu vergleichende Datum (das aktuelle Tagesdatum) um 4 Tage in die Vergangenheit zu setzen und das Ergebnis ebenfalls um 4 Tage zu korrigieren. Mit dem Vergleich &amp;lt; 4 wird dann auf +/- 3 Tage eingegrenzt.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;</description><pubDate>Wed, 30 Jan 2008 13:24:00 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Sandcastle Jan 2008 (Dokumentations-Werkzeug)</title><link>https://kb.casic.eu/Goto10067.aspx</link><description>&lt;P&gt;Mit der aktuellen Version 1.6.0.4 vom "Sandcastle Help File Builder" lässt sich bereits sehr gut arbeiten: während umfangreicher Tests sind keine Probleme mit dem GUI-Tool oder dem Januar 2008 Release von "Sandcastle" aufgetreten (vielleicht kann die Performance noch etwas verbessert werden...). Im Vergleich zu NDoc bietet Sandcastle folgende Vorteile:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Die Entwicklung wurde &lt;STRONG&gt;nicht&lt;/STRONG&gt; eingestellt :-)&lt;/LI&gt;&lt;LI&gt;Korrekter Umgang mit Generic Typen&lt;/LI&gt;&lt;LI&gt;Einbinden von externen Source-Code als Beispiel-Code (sehr praktisch!)&lt;/LI&gt;&lt;LI&gt;Dank dem Sandcastle Help File Builder so einfach zu benutzen wie NDoc&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Sandcastle Help File Builder &lt;BR&gt;&lt;A href="http://www.codeplex.com/SHFB"&gt;http://www.codeplex.com/SHFB&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Sandcastle&lt;BR&gt;&lt;A href="http://www.codeplex.com/Sandcastle"&gt;http://www.codeplex.com/Sandcastle&lt;/A&gt;&lt;/P&gt;</description><pubDate>Mon, 28 Jan 2008 18:55:00 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Der Microsoft.Jet.OLEDB.4.0-Provider ist nicht auf dem lokalen Computer registriert</title><link>https://kb.casic.eu/Goto10060.aspx</link><description>&lt;P&gt;&lt;STRONG&gt;Problem&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Unter Vista 64-Bit erhält man die Fehlermeldung "Der Microsoft.Jet.OLEDB.4.0-Provider ist nicht auf dem lokalen Computer registriert", wenn man versucht auf eine Microsoft Access-Datenbank zuzugreifen. &lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Hintergrund&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Der Provider ist nur in der 32 Bit Version verfügbar.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Lösung&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Man muss nur das Projekt mit der Zielplattform x86-Rechner kompilieren (Projekt -&amp;gt; Projekt-Eigenschaften -&amp;gt; Erstellen -&amp;gt; Zielplattform -&amp;gt; x86).&lt;BR&gt;&lt;/P&gt;</description><pubDate>Tue, 15 Jan 2008 02:10:00 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Ereignisse komfortabel deklarieren</title><link>https://kb.casic.eu/Goto10057.aspx</link><description>&lt;SPAN id=_ctl0_ArticleRepeater__ctl1_ArticleText&gt;Das Definieren von C#-Ereignissen erfordert einen hohen Eingabeaufwand. Um diesen zu reduzieren, stellen wir Ihnen hier ein Makro für Visual Studio 2005 zur Verfügung. Das Makro erzeugt den Source-Code eines C#-Ereignisses an der aktuellen Cursor-Position. Nach dem Starten des Makros werden Sie nach dem Namen und einer Beschreibung des Ereignisses gefragt. Ausserdem können Sie wählen, ob das zu erstellende C#-Ereignis über Standard-Argumente oder benutzerdefinierte Argumente verfügen soll. &lt;BR&gt;&lt;BR&gt;Ereignisse können nur direkt in Klassen (nicht innerhalb von Methoden, Eigenschaften...) eingefügt werden. Die korrekte Position des Cursors wird vor dem Einfügen geprüft. Die Klasse für die benutzerdefinierten Argumenten sowie der dazugehörige Delegat wird &lt;STRONG&gt;vor&lt;/STRONG&gt; der aktuellen Klasse erzeugt.&lt;BR&gt;&lt;BR&gt;Zur Installation des Makros kopieren Sie einfach den nachfolgenden Quellcode in ein neues oder bestehendes Makro-Modul, das Sie über den Makro-Explorer erreichen:&lt;BR&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Prozedur zum komfortablen Einfügen eines C#-Ereignisses (VS2005)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Sub&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; InsertEvent()&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; eventname &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; eventdescription &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; eventhandler &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; eventargs &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; classname &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; ret &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; MsgBoxResult&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; txt &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; TextDocument&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; edit &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; EditPoint&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; start &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; EditPoint&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; classpoint &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; TextPoint&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; linetext &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Prüfen, ob wir aktuell ein Text-Fenster haben&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;/FONT&gt;&lt;FONT size=2&gt; DTE.ActiveDocument.Type &amp;lt;&amp;gt; &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Text"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; MsgBox(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"In diesem Fenster kann kein Ereignis hinzugefügt werden, da dieses Fenster kein Text-Fenster ist"&lt;/FONT&gt;&lt;FONT size=2&gt;, MsgBoxStyle.Critical, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Fehler"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Name des Ereignisses abfragen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;eventname = InputBox(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"Name des Ereignisses:"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Ereignis-Name festlegen"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"ValueChanged"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;/FONT&gt;&lt;FONT size=2&gt; eventname = &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;""&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Exit&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Beschreibung des Ereignisses abfragen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;eventdescription = InputBox(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"Beschreibung des Ereignisses:"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Ereignis-Beschreibung festlegen"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Dieses Ereignis wird ausgelöst, sobald sich der Wert ändert."&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Prüfen, ob wir einen eigenen EventHandler verwenden wollen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;ret = MsgBox(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"Wollen Sie für das Ereignis einen eigenen EventHandler mit eigenen Ereignisparametern erzeugen?"&lt;/FONT&gt;&lt;FONT size=2&gt;, MsgBoxStyle.Question &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Or&lt;/FONT&gt;&lt;FONT size=2&gt; MsgBoxStyle.YesNo, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Eigener EventHandler?"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;/FONT&gt;&lt;FONT size=2&gt; ret = MsgBoxResult.Yes &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt; ' Eigenen Eventhandler definieren&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; eventhandler = eventname + &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT face="Courier New"&gt;"EventHandler"&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; eventargs = eventname + &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT face="Courier New"&gt;"EventArgs"&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;Else&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; eventhandler = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT face="Courier New"&gt;"EventHandler"&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; eventargs = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT face="Courier New"&gt;"EventArgs"&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Die aktuelle Position des Cursors ermitteln und die Textbearbeitung vorbereiten&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;txt = DTE.ActiveDocument.Object&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;edit = txt.StartPoint.CreateEditPoint()&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;edit.MoveToLineAndOffset(txt.Selection.ActivePoint.Line, 1)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Wir müssen uns den Startpunkt merken, um abschließend den eingefügten Block zu formatieren&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;start = edit.CreateEditPoint()&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Namen der aktuellen Klasse ermitteln&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;classname = edit.CodeElement(vsCMElement.vsCMElementClass).Name()&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;classpoint = edit.CodeElement(vsCMElement.vsCMElementClass).StartPoint&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Prüfen, ob sich der Cursor innerhalb einer Klasse befindet&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;/FONT&gt;&lt;FONT size=2&gt; edit.CodeElement(vsCMElement.vsCMElementClass).Kind &amp;lt;&amp;gt; vsCMElement.vsCMElementClass &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; MsgBox(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"Bitte setzen Sie vor dem Einfügen eines Ereignisses den Cursor in die Klasse."&lt;/FONT&gt;&lt;FONT size=2&gt;, MsgBoxStyle.Critical, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Achtung"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; Exit&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' In der UNDO-Liste einen Eintrag erstellen für alles, was wir nachfolgend einfügen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;DTE.UndoContext.Open(eventname + &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"-Ereignis"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Kopf einfügen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;edit.Insert(vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;edit.LineUp()&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"#region "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventname + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"-Ereignis"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Beschreibung des Events setzen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;/FONT&gt;&lt;FONT size=2&gt; eventdescription.Length &amp;gt; 0 &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// &amp;lt;summary&amp;gt;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// "&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + eventdescription + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// &amp;lt;/summary&amp;gt;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Attribute setzen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"[Browsable(true)]"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;/FONT&gt;&lt;FONT size=2&gt; eventdescription.Length &amp;gt; 0 &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"[Description("""&lt;/FONT&gt;&lt;FONT size=2&gt; + eventdescription + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;""")]"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Event&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"public event "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventhandler + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;" "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventname + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;";"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;edit.Insert(vbCrLf)&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Aufruf&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// &amp;lt;summary&amp;gt;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"/// Löst das "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventname + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"-Ereignis aus."&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// &amp;lt;/summary&amp;gt;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"protected virtual void On"&lt;/FONT&gt;&lt;FONT size=2&gt; + eventname + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"("&lt;/FONT&gt;&lt;FONT size=2&gt; + eventargs + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;" e)"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"{"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;" if ("&lt;/FONT&gt;&lt;FONT size=2&gt; + eventname + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;" != null)"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;" "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventname + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"(this,e);"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"}"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Fuss einfügen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"#endregion"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Eingefügten Bereich noch nach den aktuellen Spracheinstellungen formatieren&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;edit.SmartFormat(start)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt;' Eventuell eigene Ereignis-Parameter definieren (vor der Klasse!)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;/FONT&gt;&lt;FONT size=2&gt; ret = MsgBoxResult.Yes &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt; ' Auf den Beginn der Klasse positionieren&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; edit.MoveToLineAndOffset(classpoint.Line, 1)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt; ' Solange Zeile für Zeile nach oben gehen, bis wir eine freie Zeile bzw. keine Kommentarzeile haben&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt; Do&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;  edit.LineUp()&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;  linetext = Trim(edit.GetText(edit.LineLength))&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt; Loop&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Until&lt;/FONT&gt;&lt;FONT size=2&gt; linetext.Length = 0 &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Or&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Not&lt;/FONT&gt;&lt;FONT size=2&gt; linetext.StartsWith(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"//"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;))&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt; ' Wir müssen uns den Startpunkt merken, um abschließend den eingefügten Block zu formatieren&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; start = edit.CreateEditPoint()&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt; ' Jetzt vor der Klasse die Definition der Parameter-Klasse und des Delegaten einfügen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; edit.EndOfLine()&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"#region "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventname + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"-Ereignis (Parameter-Klasse und Delegat)"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// &amp;lt;summary&amp;gt;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"/// Definiert die Argumente für das "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventname + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"-Ereignis."&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// &amp;lt;/summary&amp;gt;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"public class "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventargs + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;" : EventArgs"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"{"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;" // TODO: Ereignis-Parameter für "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventname + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;" definieren"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;" private string a;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;" private string b;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"}"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// &amp;lt;summary&amp;gt;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"/// Delegat für das "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventname + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"-Ereignis."&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"/// &amp;lt;/summary&amp;gt;"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#a31515 size=2&gt;"public delegate void "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventhandler + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"(object sender, "&lt;/FONT&gt;&lt;FONT size=2&gt; + eventargs + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;" e);"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt; edit.Insert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"#endregion"&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; + vbCrLf)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt; ' Eingefügten Bereich noch nach den aktuellen Spracheinstellungen formatieren&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; edit.SmartFormat(start)&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' UNDO-Eintrag abschließen&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;DTE.UndoContext.Close()&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;' Fertig !&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;</description><pubDate>Mon, 07 Jan 2008 23:48:00 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Information</title><link>https://kb.casic.eu/Goto10047.aspx</link><description>&lt;SPAN id=_ctl0_ArticleRepeater__ctl1_ArticleText&gt;In diesem Bereich sind alle Knowledge Base Artikel hinterlegt, die sich auf&lt;UL&gt;&lt;LI&gt;Microsoft .NET Version 2.0 &lt;LI&gt;Microsoft Visual Studio 2005 &lt;LI&gt;mdTOOLS .NET 2.x&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;beziehen.&lt;/P&gt;&lt;/SPAN&gt;</description><pubDate>Wed, 02 Jan 2008 02:23:00 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Eingaben in Textfelder auf Ziffern begrenzen</title><link>https://kb.casic.eu/Goto10005.aspx</link><description>&lt;P&gt;Oft benötigt man die Möglichkeit, Textfelder auf die Eingabe von Ziffern zu beschränken: z.B. für die Eingabe von Postleitzahlen, Telefonnummern usw. Dies kann sehr einfach erreicht werden, indem im KeyPress-Ereignis folgender Code ausgeführt wird:&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace"&gt;private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)&lt;BR&gt;{&lt;BR&gt; &lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace" color=#006600&gt;// Nur Ziffern und die Backspace-Taste (\b) dürfen eingegeben werden&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace"&gt; if ("1234567890\b".IndexOf(e.KeyChar.ToString())&amp;lt;0)&lt;BR&gt;  e.Handled=true;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/B&gt;Das eingegebene Zeichen ist in &lt;B&gt;e.KeyChar&lt;/B&gt; enthalten. Die Routine prüft nun, ob das eingegebene Zeichen im definierten Zeichenvorrat (Ziffern 0-9 und Backspace) vorhanden ist. Ist es nicht vorhanden, wird &lt;B&gt;e.Handled&lt;/B&gt; auf &lt;B&gt;true&lt;/B&gt; gesetzt. Dies teilt der Textbox mit, dass diese Zeicheneingabe bereits bearbeitet wurde - das eingegebene Zeichen erscheint nicht in der Textbox. Der Zeichenvorrat kann entsprechend einfach erweitert werden, z.B. für Telefon- und Telefaxnummerneingaben etc.&lt;BR&gt;&lt;/P&gt;</description><pubDate>Mon, 31 Dec 2007 04:12:00 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Eigene Controls in der Toolbox-Auflistung verfügbar machen</title><link>https://kb.casic.eu/Goto10010.aspx</link><description>&lt;P&gt;Wenn Sie eigene .NET-Steuerelemente entwickelt haben, kennen Sie vielleicht folgendes Problem: Sie erstellen ein neues Projekt und wollen in diesem das selbstentwickelte Control verwenden. Ok, dazu muß das Control erst mal in die Toolbox. Kein Problem - einfach mit einem Rechtsklick auf die Toolbox - danach erscheint ein Popup-Menü mit dem Eintrag “Toolbox anpassen...”. In dem darauf erscheinenden Dialog in das Tab “.NET Framework-Komponenten” wechseln und das selber entwickelte Control suchen... und... es ist &lt;B&gt;nicht da!&lt;/B&gt; Ok, wir könnten jetzt auf die Schaltfläche “Durchsuchen” klicken und dann die entsprechende DLL auswählen... Es geht aber auch eleganter! Wenn auf das Tab “.NET Framework-Komponenten” geklickt wird, durchsucht Visual Studio anhand einer in der Registry abgelegten Pfadliste alle darin enthaltenen Verzeichnisse nach .NET-Komponenten. Da aber der Pfad für das selbst entwickelte Control in dieser Pfadliste noch fehlt, wird es nicht in der Liste aufgeführt. Mit dem Tool RegEdit können Sie selber problemlos diesen Pfad selber nachreichen: &lt;BR&gt;&lt;BR&gt;Gehen Sie im Programm RegEdit in folgendes Verzeichnis:&lt;BR&gt;&lt;B&gt;Arbeitsplatz\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders&lt;BR&gt;&lt;BR&gt;&lt;/B&gt;Sie sehen nun unterhalb dieses Verzeichnisses mehrere Schlüssel, deren Standard-Werte jeweils auf ein Verzeichnis zeigen. Um nun auf das eigene Control einen Verzeichnis-Verweis anzulegen, legen Sie zuerst einen Schlüssel an (verwenden Sie hierzu z.B. den Namen der Komponente). Wählen Sie anschließend den angelegten Schlüssel aus. Im rechten Teil des RegEdit-Fensters erscheint nun der Standard-Wert. Mit einem Doppelklick darauf können Sie diesen Wert ändern. Geben Sie dort den vollständigen Pfad zu Ihrer Komponente an (also z.B. C:\Programme\Meine Controls). Nachdem Sie Ihre Eingaben in der Registry gespeichert haben, stehen Ihnen beim nächsten Anpassen der Toolbox unter Visual Studio .NET alle Komponenten zur Verfügung, die sich in diesem Verzeichnis befinden.&lt;/P&gt;</description><pubDate>Sun, 30 Dec 2007 22:48:00 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Durchsichtige Farbe bei Toolbox-Grafik</title><link>https://kb.casic.eu/Goto10009.aspx</link><description>&lt;P&gt;Schon im “alten” Visual Basic gab es die Möglichkeit, den Toolbox-Bildern von eigenen Steuerelementen eine durchsichtige Farbe anzugeben. Unter .NET sind die Toolbox-Grafiken grundsätzlich 16x16 Pixel groß. Der Pixel links, unten bestimmt im Visual Studio .NET die Farbe, die durchsichtig dargestellt werden soll (also die Koordinate 0,15). Beim Designen einer Toolbox-Grafik ist also darauf zu achten, daß z.B. eine Umrandung nicht durch den Pixel 0,15 läuft, da sonst die Umrandung durchsichtig wird...&lt;/P&gt;</description><pubDate>Sun, 30 Dec 2007 22:47:00 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Fehlerhafte Rundungsfunktionen in .NET ersetzen</title><link>https://kb.casic.eu/Goto10008.aspx</link><description>Ein uraltes Problem hat auch bei .NET wieder zugeschlagen: die integrierte Rundungsfunktion Round() ist fehlerhaft. Bei gewissen Zahlenkonstellationen rundet die integrierte Funktion falsch (z.B. wird aus 0.005 gerundet auf zwei Nachkommastellen 0 statt 0.01). Im Gegensatz zu der VisualBasic-Implementierung funktioniert die Rundungsfunktion in .NET aber schon viel besser (in VB gibt es viel mehr Zahlenkonstellationen, die falsch gerundet werden!). Eigentlich müßte man denken, daß es doch gar nicht so schwer sein kann, eine funktionierende Rundungsfunktion zu implementieren - ist es auch nicht, wenn man es richtig macht: Der Algorithmus zum Runden ist sehr einfach aufgebaut - man darf allerdings die Randbedingungen nicht vernachlässigen. Verwendet man z.B. in der Rundungsfunktion als Datentyp Double, wird man garantiert bei einigen Zahlenkonstellationen falsche Rundungen erhalten. Dies liegt an der internen Speicherung von Zahlen im Datentyp Double (und andere Datentypen, die auf Fließkomma beruhen). Bei diesen Datentypen kann es vorkommen, daß bei Multiplikation und Division (teilweise sogar bei Addition und Subtraktion) das letzte Bit nicht korrekt gesetzt wird und man z.B. bei 0.05 / 2 nicht 0.025 sondern 0.024999999999999999 erhält (0.05 / 2 dient hier nur als exemplarisches Beispiel!). Um dieses Problem zu umgehen benötigt man einen Datentyp, der eine feste Anzahl von Nachkommastellen aufweist, wie z.B. der Datentyp Decimal. Leider ist auch im Datentyp Decimal die Round()-Funktion fehlerhaft implementiert (wahrscheinlich erfolgt erst eine Konvertierung in Double, dann Rundung und anschließend wieder eine Zurückkonvertierung in Decimal... ist aber nur eine Vermutung). Die folgende Funktion zeigt die korrekte Implementierung einer Rundungsfunktion auf n Stellen:&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace" color=#006600&gt;// Diese Funktion rundet die übergebene Zahl auf die angegebenen Anzahl von &lt;BR&gt;// Nachkommastellen&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace"&gt;private decimal mdROUND(decimal Zahl, ushort Stellen)&lt;BR&gt;{&lt;BR&gt; &lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace" color=#006600&gt;// Multiplikator berechnen&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace"&gt; decimal St = (decimal) Math.Pow(10,(double) Stellen);&lt;BR&gt; &lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace" color=#006600&gt;// Rundung durchführen und zurückliefern&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace"&gt; return Decimal.Truncate(Zahl * St + (0.5m * Math.Sign(Zahl)))/St;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/B&gt;In der ersten Zeile wird der Multiplikator berechnet (10 hoch Anzahl der Stellen auf die gerundet werden soll - wenn also auf 2 Stellen gerundet werden soll, so ist der Multiplikator 100...). Der Multiplikator wird in der zweiten Zeile benötigt. In der zweiten Zeile multiplizieren wir die übergebene Zahl mit dem Multiplikator und erhalten dadurch die Verschiebung des Dezimaltrennzeichens um n Stellen nach rechts. Dann wird 0.5 hinzuaddiert (bzw. subtrahiert bei einer negativen Zahl). Durch diese Addition ergibt sich ein Übertrag in den Vorkommabereich, wenn der Nachkommabereich &amp;gt;= 0.5 ist (so ist die kaufmännische Rundung definiert). Im nächsten Schritt entfernen wir den restlichen Nachkommabetrag, so daß wir jetzt eine Ganzzahl haben und dividieren diese anschließend durch den Multiplikator um das Dezimaltrennzeichen wieder n Stellen, diesmal nach links, zu verschieben. Und schon haben wir das korrekte Ergebnis und können dieses zurückliefern.&lt;BR&gt;&lt;BR&gt;Über den nachfolgenden Download-Link können Sie sich ein kleines Test-Projekt herunterladen, in dem die unterschiedlichen Ergebnisse der oben vorgestellten mdROUND()-Funktion mit den Ergebnissen der integrierten Decimal.Round()-Funktion aufgelistet werden.&lt;BR&gt;</description><pubDate>Sun, 30 Dec 2007 22:44:00 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Datensätze filtern und suchen, die Anführungszeichen beinhalten</title><link>https://kb.casic.eu/Goto10006.aspx</link><description>&lt;P&gt;Wenn Sie Datensätze filtern bzw. suchen, die Anführungszeichen beinhalten (das einfache Anführungszeichen bzw. das Hochkomma), so müssen Sie dieses duplizieren. Ansonsten erhalten Sie eine Fehlermeldung, da der Parser der Meinung ist, dass das alleinstehende Anführungszeichen das Textbegrenzungszeichen ist. &lt;BR&gt;&lt;BR&gt;Beispiel für mdUDA.NET in C#:&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace" color=#006600&gt;// Variablen deklarieren&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace"&gt;string s;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace" color=#006600&gt;// Datenbank öffnen&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace"&gt;Database db = UDA.OpenDatabaseMSAccess(@”C:\Daten\NWind.mdb”);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace" color=#006600&gt;// Recordset öffnen&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace"&gt;Recordset rs = db.OpenRecordset("SELECT Firma, Straße, PLZ, Ort, Land FROM Kunden");&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace" color=#006600&gt;// Wir suchen alle Datensätze, die mit “Trail’s” beginnen&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace"&gt;s = "Trail's";&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace" color=#006600&gt;// Jetzt müssen wir alle einzelnen Hochkommas verdoppeln&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace"&gt;s = s.Replace("'","''");&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace" color=#006600&gt;// Recordset filtern&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace"&gt;rs.Filter = "Firma LIKE '"+s+"*'";&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace" color=#006600&gt;// Ergebnismenge auf der Console ausgeben&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace"&gt;rs.Dump(); &lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace" color=#006600&gt;// Fertig&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/B&gt;Ausgabe auf der Console:&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace"&gt;|Firma&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace" color=#ffffff&gt;----------------------------&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace"&gt;|Straße&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace" color=#ffffff&gt;-----------&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace"&gt;|PLZ&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace" color=#ffffff&gt;--&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace"&gt;|Ort&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace" color=#ffffff&gt;-----&lt;/FONT&gt;&lt;FONT face="Courier New,Lucida Console,Courier,Monaco,Monospace,monospace"&gt;|Land|&lt;BR&gt;|---------------------------------+-----------------+-----+--------+----|&lt;BR&gt;&amp;gt;Trail's Head Gourmet Provisioners|722 DaVinci Blvd.|98034|Kirkland|USA |&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;</description><pubDate>Sun, 30 Dec 2007 22:35:00 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Information</title><link>https://kb.casic.eu/Goto10007.aspx</link><description>&lt;P&gt;In diesem Bereich sind alle Knowledge Base Artikel hinterlegt, die sich auf&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Microsoft .NET Version 1.1&lt;/LI&gt;&lt;LI&gt;Microsoft Visual Studio 2003&lt;/LI&gt;&lt;LI&gt;mdTOOLS .NET 1.x&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;beziehen.&lt;/P&gt;</description><pubDate>Sun, 30 Dec 2007 22:34:00 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item><item><title>Ausschließlich lokale Assemblies verwenden</title><link>https://kb.casic.eu/Goto10001.aspx</link><description>&lt;P&gt;Normalerweise reicht es bei der Installation einer .NET-Applikation, wenn alle verwendeten Bibliotheken in das Installationsverzeichnis kopiert werden. Probleme können auftauchen, wenn die verwendeten Bibliotheken zusätzlich im GAC (Global Assembly Cache) installiert sind. Assemblies im GAC werden bevorzugt geladen. Theoretisch wird durch die Versionierung sichergestellt, dass das Programm automatisch immer die richtige Version verwendet - allerdings gibt es in der Praxis immer wieder Konstellationen, wo dies nicht ganz hinhaut. Um 100% sicherzustellen, dass die im Installationsverzeichnis hinterlegten Bibliotheken verwendet werden (und nicht die aus dem GAC), müssen diese beim Programmstart explizit geladen werden. Dies muss unbedingt vor der ersten Verwendung einer Bibliothek geschehen - also z.B. im Konstruktor der ersten Form, die geladen wird: &lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#008000&gt;&lt;STRONG&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt;&lt;/STRONG&gt;&lt;STRONG&gt; &lt;FONT color=black&gt;frmStartForm : System.Windows.Forms.Form&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=black&gt;{&lt;/FONT&gt;&lt;BR&gt; // Cache für alle explizit geladenen Assemblies&lt;BR&gt;&lt;FONT color=#0000ff&gt; private&lt;/FONT&gt;&lt;FONT color=black&gt; ArrayList AssemblyCache &lt;/FONT&gt;= &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;/STRONG&gt;&lt;STRONG&gt; &lt;FONT color=black&gt;ArrayList();&lt;/FONT&gt; &lt;BR&gt;&lt;BR&gt; // Konstruktor&lt;BR&gt; &lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;/STRONG&gt;&lt;STRONG&gt; &lt;FONT color=#000000&gt;frmStartForm&lt;/FONT&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;FONT color=black&gt;()&lt;BR&gt;&lt;/FONT&gt; {&lt;BR&gt;&lt;/STRONG&gt;&lt;STRONG&gt;  // Assemblies laden und Verweise cachen&lt;BR&gt;  &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&lt;FONT color=#000000&gt;[] dlls;&lt;/FONT&gt;&lt;BR&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000&gt;&lt;STRONG&gt;  // Alle lokalen Assemblies ermitteln &lt;BR&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;  dlls = System.IO.Directory.GetFiles(Application.StartupPath,"*.dll");&lt;BR&gt;  &lt;/STRONG&gt;&lt;FONT color=#008000&gt;&lt;STRONG&gt;// Alle lokalen Assemblies laden &lt;BR&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color=#0000ff&gt;  foreach&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; dll &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt; dlls)&lt;BR&gt;  {&lt;BR&gt;   &lt;FONT color=#008000&gt;// Assembly laden und Verweis im Cache speichern&lt;/FONT&gt;&lt;BR&gt;   AssemblyCache.Add(System.Reflection.Assembly.LoadFile(dll));&lt;BR&gt;  }&lt;BR&gt;&lt;/STRONG&gt;&lt;FONT color=#008000&gt;&lt;STRONG&gt;  &lt;BR&gt;  //&lt;BR&gt;  &lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;STRONG&gt;// Erforderlich für die Windows Form-Designerunterstützung&lt;BR&gt;  &lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;STRONG&gt;//&lt;BR&gt;  &lt;/STRONG&gt;&lt;/FONT&gt;&lt;STRONG&gt;InitializeComponent();&lt;BR&gt;&lt;BR&gt;  &lt;/STRONG&gt;...&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;Das Cachen der Assembly-Verweise ist nicht unbedingt notwendig, da beim Laden von Assemblies diese automatisch der Applikations-Domäne zugeordnet werden und bis zum Ende des Programmes damit verbunden bleiben. Allerdings ist dieses Verhalten nicht genau dokumentiert und könnte in zukünftigen .NET-Versionen geändert werden - daher ist das Cachen der Verweise sicherer.&lt;/P&gt;</description><pubDate>Sun, 30 Dec 2007 22:23:00 GMT</pubDate><dc:creator>Markus Diettrich</dc:creator></item></channel></rss>