Seit ca. 2 Monaten blogge ich nun und dies ist der 100ste Eintraig in meinem Blog. Mir macht es Spass und für mich ist der Blog auch ein gutes Nachschlagewerk. Die Statistik zeigt mir, dass es wohl den einen oder anderen gibt, der auch liest, was ich hier so von mir gebe.
Für mich wäre es klasse, hier ein wenig Feedback zu erhalten. Ich bin dankbar für Anregungen aller Art. Sind die Beiträge zu knapp oder zu ausführlich? Sind die Themen interessant? Hat es dem einen oder anderen evtl. schon bei einem konkreten Problem geholfen. Lesen Sie den Blog regelmäßig oder sind Sie über eine Suchmaschine nur zufällig darauf gestossen? Wie sind Sie auf den Blog gekommen etc. etc.
Ich würde mich freuen, wenn ich ein wenig Feedback bekommen könnte. Entweder über den Contact-Link auf der linken Seite oder einfach als Kommentar zu diesem oder Beitrag.
In manchen Situationen hilft ein Breakpoint beim Debugen einfach nicht weiter. Haben Sie schon mal versucht, einen Eventhandler für ein Mouse-Move-Ereignis mit einem Breakpoint zu debuggen? Das ist schlicht unmöglich.
Abhilfe schafft hier das Debug-Objekt. Sie können damit z.B. Informationen im Ausgabefenster von VS ausgeben. In oben beschriebenen Fall würden Sie also z.B. folgendes verwenden:
private void Form2_MouseMove(object sender, MouseEventArgs e) { System.Diagnostics.Debug.WriteLine(e.X + " - " + e.Y); }
Das Ergebnis sieht man wie gesagt im Ausgabefenster von Visual Studio (Einblenden über Strg + Alt + O).
Welche Entwickler hat denn schon die Namespaces aller Objekte des Frameworks im Kopf? Da hilft oft nur in der Hilfe nachschauen - oder man kennt eine kleine aber sehr nette Funktion im Visual Studio 2005!
Man gibt einfach den Namen des Objektes ein. Ist das Objekt im .net Framework enthalten, erkennt VS das automatisch und zeigt dies durch einen kleinen roten Strich am Ende des Objektnamens ein. Klickt man darauf, kann man auswählen, ob der Namespace vor dem Objekt eingefügt l oder ob automatisch ein Using für den Namespace eingefügt werden soll. Unten sieht man ein Beispiel mit dem Objekt MailMessage.
Eigentlich dachte ich, das sei eine ganz simple Aufgabe, aber dann hat mich das Ganze doch 2 Stunden Zeit gekostet. Das Ziel war, zwei Panels über einen separaten Scrollbar zu scrollen. Alse Panels in der Form platziert, AutoScroll auf false gesetzt, damit nicht jedes Panel mit einem Scrollbar versehen wird und den Scrollbar hinzugefügt. Der Event für das Scrollen war auch schenll gefunden, aber dann gab es Probleme.
Deshalb hier die Vorgehensweise, die nach meinen Versuchen am besten funktioniert hat.
private void Form2_Load(object sender, EventArgs e) { this.panel1.AutoScroll = true; this.panel2.AutoScroll = true; this.ultraScrollBar1.Minimum = this.panel1.HorizontalScroll.Minimum; this.ultraScrollBar1.Maximum = this.panel1.HorizontalScroll.Maximum; this.ultraScrollBar1.Value = this.panel1.HorizontalScroll.Value; this.ultraScrollBar1.SmallChange = this.panel1.HorizontalScroll.SmallChange; this.ultraScrollBar1.LargeChange = this.panel1.HorizontalScroll.LargeChange; this.panel1.AutoScroll = false; this.panel2.AutoScroll = false; }
private void ultraScrollBar1_Scroll(object sender, ScrollEventArgs e) { this.panel1.AutoScrollPosition = new Point(e.NewValue, 0); this.panel2.AutoScrollPosition = new Point(e.NewValue, 0); }
Hierzu ein paar Anmerkungen: 1.) Die Werte für Minimum, Maximum, SmalChange und LargeChange können vom Panel nur dann sauber abgefragt werden, wenn AutoScroll = true gesetzt ist. 2.) Wird die Scrollposition über this.panel1.HorizontalScroll.Value gesetzt, was naheliegend wäre, kommt es bei abgeschaltetem AutoScroll zu einem seltsamen Flimmer-Effekt. Statt dessen muss die AutoScrollPosition gesetzt werden. 3.) Auch für das zweite Panel muss das AutoScroll einmal aktiviert und dann wieder deaktiviert werden, sonst scrollt das nicht mit.
Also diese Lösung funktioniert mal.
Diese Vorgehensweise scheint mir jedoch recht unlogisch und sehr umständlich. Ob das Framework da nichts besseres bietet oder ob ich da einfach noch nicht den richtigen Dreh gefunden hab, weiss ich im Moment noch nicht. Ich werde bei Gelegenheit das mal vertiefen und an dieser Stelle wieder posten.
Zur Erstellung von Reports sind die Reporting Services des SQL-Servers recht bekannt. Dass aber auch Reports direkt in VS 2005 ohne SQL-Server erstellt werden können, ist weniger bekannt. Die Berichte können zur Laufzeit angepasst werden. Diese Reporting-Funktionalität kann einfach in eigene Anwendungen integriert werden. Durch ein offenes XML-Format können die Berichtsvorlagen auch aus eigenen Anwendungen heraus erzeugt werden.
In einem Web-Cast stellt Sebastian Weber die Funktionen aber auch die Unterschiede zu den SQL-Server Reporting-Services dar.
https://www.microsoft.com/germany/MSDN/webcasts/library.aspx?id=118771506
Auf dieser Seite wird der Einstieg in die .Net Programmierung an ein paar Beispielen Schritt für Schritt aufgezeigt. Damit kann wirklich jeder in die Programmierung mit .Net einsteigen und Interesse daran finden.
Vor allem bei der Aufmachung hat sich Microsoft echt was einfallen lassen.
http://www.microsoft.com/germany/msdn/aktionen/wirbauenwas/default.mspx
Wenn man seine Klassen sauber mit XML-Kommentaren versieht, ist es ein leichtes, daraus auch eine schöne Dokumentation zu erstellen. Nur beim eingeben der XML-Kommentare taucht oft die Frage aus, wie sieht das Ergebnis aus? Dazu jedesmal die Dokumentation zu erstellen ist recht mühsam. Abhilfe schafft hier dieses kleine Tool, das in der IDE eine HTML-Vorschau ermöglicht.
http://www.kyrsoft.com/opentools/qdocviewer.html

Bei Galileo-Computing kann man sich kostenlos das Openbook "Praxisbuch Objektorientierung" herunterladen. Ich habe es leider noch nicht gelesen, deshalb hier die Kurzbeschreibung des Verlages:
Kaum eine Software, die nicht mehr objektorientiert entworfen und entwickelt wird! Die beiden Autoren geben eine umfassende Einführung in die Prinzipien und die Anwendung der Objektorientierung. Das Buch ist aufgabenorientiert, bietet Beispiele in den Sprachen C++, Java, Ruby, und C# sowie ein Kapitel zur aspektorientierten Programmierung.
http://www.galileocomputing.de/openbook/oo/
Der Task-Manager liefert oftmals nur unzureichende Informationen über die einzelnen Prozesse etc. Mit dem Tool Process Explorer kann man zu jedem Prozess umfangreiche Informationen abfragen. Das Tool kann auch den Task-Manager ersetzen.
Sehr praktisch ist, dass man das Tool nicht installieren muss, sondern die Exe separat gestartet werden kann.
http://www.sysinternals.com/Utilities/ProcessExplorer.html
22:02 - Im Internet nach einem Tutorial gesucht. 22:10 - Genau das Passende gefunden. 22:11 - Ausdruck starten, um zu Hause zu lesen 22:12 - Geflucht, weil der rechte Rand mal wieder abgeschnitten ist
Für sole Probleme hat jeder so seinen eigenes Patentrezept, im Querformat drucken, nach Word kopieren und von da drucken oder - dieses kleine Tool installieren. Damit kann im IE die Seite so angepasst werden, dass Sie auf jeden Fall auf die Seite passt. Das Tool bietet auch eine Vorschau. Echt genial!
ACHTUNG - Bei der deutschen Version des IE muss das Icon manuell in die Symbolleiste eingefügt werden: Rechte Maustaste auf die Symbolleiste / Anpassen dann aus der linken Liste das Icon "Fit-width Print" in die rechte Liste übernehmen.
http://www.visiontech.ltd.uk/software/#IEPrint
Jeder Programmierer kennt das Problem. Am Entwicklungsrechner hat man einen schönen großen Monitor aber wie sieht die Anwendung bei einer anderen Auflösung, z.B. 1024 x 768 aus? Ein Fenster genau auf diese Größe zu bringen ist genau das, was Sizer tut. Man kann sich beliebige Größen defibnieren und dann einfach diese Größe für ein Fenster einstellen lassen.
http://www.brianapps.net/sizer.html
Mit diesem Tool lassen sich verschiedene Befehle auf Datenbanken ausführen. Damit lassen sich z.B. Daten einer Tabelle abfragen und nach CSV oder XML exportieren. Der besondere Charme des Tools ist, dass es nicht installiert werden muss, es kann einfach die EXE gestartet werden. Damit ist es gut geeignet als Datenbank-Viewer für unterwegs.
http://www.albahari.com/queryexpress.html
Ich habe im Speicher ein DataView mit ca. 22000 Datensätzen. Aus diesem DataView musste ich nun innerhalb einer Schleife 55 Abfragen machen. Dazu zwei Methoden:
dvINNs.RowFilter = "ProductDSID = " + drProducts["ProductDSID"];
foreach (DataRowView drINN in dvINNs) { ... }
oder
foreach (DataRow drINN in dvINNs.Table.Select("ProductDSID = " + drProducts["ProductDSID"])) { ... }
Ich habe eine Zeitmessung durchgeführt. Dies ergab für Methode I 1,5 Sek und für Methode II 0,03 Sek. D.h. der Select ist um Faktor 50 (in meinem Beispiel) schneller als der RowFilter.
Oft möchte man von einem DateTime-Wert die Kalenderwoche abfragen. Hierzu gibt es eine einfache Funktion:
Application .CurrentCulture.Calendar.GetWeekOfYear(CurrentDate, System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
Dabei steht in CurrentDate das aktuelle Datum und die beiden anderen Parametern definieren Regeln, welche Woche als erste KW gilt. Standard in Deutschland ist dass der 1. Janur in KW 1 liegt, wenn dieser Tag ein Montag, ein Dienstag oder ein Mittwoch ist. Andernfalls zählt der 1. Januar noch zur letzten Woche des alten Jahrs und die KW1 beginnt am darauffolgenden Montag.
Um Einträge in die Toolbox von VS hinzuzufügen gibt es die Standard-Methode - rechte Maustaste, Elemente auswählen und sich dann die Elemente einzeln auswählen um sie hinzuzufügen. Weniger bekannt ist eine Methode, die gerade bei einer größeren Anzahl hinzuzufügender Controls schneller ist. Man kann die zugehörigen DLL-Dateien einfach per Drag & Drop aus dem Windows-Explorer auf die Toolbox ziehen.
Der kostenlose Internet Explorer Developer Toolbar von Microsoft bietet eine Fülle von sehr nützlichen Funktionen für Web-Entwickler. Der Toolbar integriert sich im Internet-Explorer. Man kann sich z.B. Objekte wie Tabellen, Bilder, DIVs etc. durch eine Umrandung hervorheben lassen oder man kann die komplette DOM-Struktur dursuchen und die Eigenschaften der Elemente abfragen und sogar verändern. Die Änderungen werden sofort sichtbar. Darüber hinaus werden noch eine vielzahl nützlicher Helfer angeboten, z.B. um Cookies anzuzeigen und zu löschen etc. Ein Tool, das bei keinem Web-Entwickler fehlen sollte!
http://www.microsoft.com/downloads/details.aspx?FamilyID=E59C3964-672D-4511-BB3E-2D5E1DB91038&displaylang=en
Oft möchte man den Monatsnamen eines Datums in der jeweiligen Landessprache des Anwenders ausgeben. Dies kann man einfach mit einer Zeile Code bewerkstelligen:
string MonthName = Application .CurrentCulture.DateTimeFormat.MonthNames[DateTimeValue.Month-1];
Alternativ kann man auch die Kurzform der Monate über die Eigenschaft AbbreviatedMonthNames abfragen.
Will man eine spezifische Sprache zur Ausgabe verwenden, kann man dies natürlich auch tun indem man einfach das entsprechende CultureInfo-Objekt verwendet:
CultureInfo ci = new CultureInfo("de-DE"); ci.DateTimeFormat.MonthNames[MonthID];
Unter http://www.galileocomputing.de/openbook/visual_csharp/index.htm kann man kostenlos den gesamten text des Buches "Visual C# 2005" lesen und auch herunterladen. Das Buch ist gut geschrieben und enthält umfangreiches Wissen zur Programmierung mit C#. Es sit auf dem aktuellsten Stand (C# 2.0) und geht auch auf alle wichtigen Neuerungen ein.
Mir hat das Buch so gut gefallen, dass ich mir gleich eine Print-Version gekauft habe. Aber es kann sich ja jeder kostenlos überzeugen 
Jedenfalls finde ich das Openbook-Konzept gut, da ich so die Katze nicht im Sack kaufen muss.
Im Infragistics-Grid lassen sich einfach dei Beschriftungen der einzelnen Gruppen der Outlook-Gruppierung einstellen. Hierzu muss lediglich der Event InitializeGroupByRow verwendet werden. Das folgende Beispiel ändert die Beschriftung so ab, dass nur die Bezeichnung der Gruppe ausgegeben wird.
private void ultraGrid1_InitializeGroupByRow(object sender, Infragistics.Win.UltraWinGrid.InitializeGroupByRowEventArgs e) { e.Row.Description = e.Row.Value.ToString(); }
In Ulm gibt es nun auch eine .net User-Group.
Die .net Developer-Group Ulm ist eine Organisation, die den Wissens- und Erfahrungsaustausch zwischen .net Entwicklern aus der Region Ulm und Oberschwaben fördern möchte. Jeder kann kostenlos und unverbindlich Mitglied werden.
In regelmäßigen Abständen werden Mitgliedertreffen abge-halten, bei denen Vorträge zu aktuellen Themen gehalten werden.
www.dotnet-ulm.de
Jede Menge Code-Snippets für alle Lebenslagen finden sich unter
http://dotnet-snippets.de/dns
Achtung Cookies müssen zugelassen werden, sonst funktioniert die Seite nicht korrekt.
Recht bekannt ist die Option im Infragistics Grid Datensätze durch einen Klick auf den Kopf einer Spalte zu filtern.

Es gibt aber auch die Möglichkeit, eine Zeile einzublenden, in der die Filterbedingung für jede Spalte eingegeben wird. Der Vorteil liegt dabei darin, dass auch nur Anfangsbuchstaben eingegeben werden können. Um dies zu erreichen, stellt man einfach im Designer Dialog unter Feature Picker die Option Filtering / Filter UI Type auf Filter Row. Das Ergebnis sieht dan so aus:
Wird eine Datei aus der TeamSystem SourceControl ausgecheckt, wird von dieser datei nicht automatisch die letzte Version gehohlt wie man das von VSS gewohnt ist. Der Grund dafür ist, dass dadurch evtl. ein inkonsistenter Zustand der Anwendung entstehen könnte, da die ausgecheckte Datei in einer neueren Version vorliegt, die nicht mit den restlichen dateien des Projekts kompatibel ist.
Weitere Ausführungen unter: http://blogs.vertigosoftware.com/teamsystem/archive/2006/05/15/2755.aspx
| |