.NET Blog   ·   .NET Casts   ·   .NET GUI Foren   ·   .NET BlogBook   ·   WPF Blogger   ·   visual studio one   ·   ASP.NET professional

  • ACHTUNG - NEUES BLOG

    Ab sofort steht unter http://devtyr.norberteder.com mein neues Blog zur Verfügung. Dieses Blog wird nicht weiter betreut, bleibt aber erhalten. Neue Eintr%auml;ge erfolgen nur mehr im neuen Blog. Kommentare werden ebenfalls nicht mehr behandelt. Wer weiterhin meinen Einträgen und Aktivitäten folgen möchte, möge bitte RSS-Feeds, Verlinkungen etc. an die neue Location anpassen.
Download .NET Essentials Installer
Trickkiste

Deploying unter .NET 3

05.07.06 - Base Framework
Beitrag von Norbert Eder
 Alles zum Thema Deployment unter .NET 3 findet sich wohl unter [1]. Wer also schon früh informiert sein will, der sollte sich diesen Link genauer ansehen.

[1] Deploying Microsoft .NET Framework Version 3

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


.NET Framework 3.0 - Part 2

13.06.06 - Base Framework
Beitrag von Norbert Eder
 Und natürlich gibt es dazu mittlerweile auch eine eigene Website, die unter [1] zu erreichen ist. Darauf sollte ansich alles zu finden, was man so für den Anfang benötigt, egal ob WCP, WPF etc.

Wer die aktuelle WinFX Runtime ziehen möchte, kann dies unter [2] tun.

[1] Link .NET Framework 3.0
[2]
Download Microsoft Pre-Release Software WinFX Runtime Components - Beta2

  1 Kommentar - 168 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


MSDN Wiki online

13.06.06 - Base Framework
Beitrag von Norbert Eder
 Für .NET Interessierte durchaus empfehlenswert ist das MSDN Wiki [1]. Quasi die MSDN unter Mithilfe der Community.

[1] Link MSDN Wiki

  Kommentar hinzufügen - 2 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Windows Vista und das .NET Framework - Welche Version?

10.06.06 - Base Framework
Beitrag von Norbert Eder
 In unserem Unternehmen, als auch in vielen anderen Unternehmen, als auch Foren, kehrt immer wieder die Frage in die allgemeine Runde ein, welche .NET Version denn nun standardmäßig mit Windows Vista ausgeliefert wird.

Nun, hier die Antwort: .NET 3.0

Verschrieben? Nein. Ich wiederhole: .NET 3.0

Was wird in .NET 3.0 neu sein? Nun, so wie es aussieht, handelt es sich dabei um eine Zusammenführung von WinFX und .NET 2.0. Weitere Entwicklungen des Basisframeworks wird es also vermutlich erst 2007 geben.

via Albert

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


C# Beginner: Enumeratoren vs Flags

09.06.06 - .NET, Base Framework
Beitrag von Norbert Eder
 Enumeratoren sind ja den meisten C# Entwicklern durchaus bekannt. Flags allerdings werden nicht sehr oft eingesetzt. Diese Erfahrung habe ich in diversen Foren gemacht und daher möchte ich dazu ein paar Worte verlieren.

Enumeratoren
Ein Enumerator kann bestimmte vordefinierte Werte enthalten und ist vor allem für Aufzählungen sehr praktisch. Ein Beispiel wäre hierfür der Color-Enumerator. Dieser ermöglicht das einfache Auswählen von Farbwerten. Ein eigenes Beispiel würde wie folgt aussehen:

public enum TestEnum
{
EnumValue0 = 0,
EnumValue1 = 1
}

Für einzelne Items kann hier ein bestimmter Wert definiert werden, muss jedoch nicht. Standardmäßig repräsentiert ein Enumerator einen Int32-Value und beginnt bei 0, ausser anders definiert. Eine Zuweisung sieht beispielsweise wie folgt aus:

private TestEnum testEnum = TestEnum.EnumValue0;

Zu beachten ist, dass testEnum immer nur einen Wert enthalten kann. Dies führt uns nun zur Frage: "Was tun, wenn ich jedoch mehrere Werte speichern möchte?". Ganz einfach:

Flags
Flags können mehrere Werte enthalten. Zuerst jedoch ein Beispiel für die Definition eines Flags:

[Flags]
public enum TestFlag
{
FlagValue1 = 1,
FlagValue2 = 2,
FlagValue4 = 4,
FlagValue8 = 8,
FlagValue16 = 16
}

Im Grunde handelt es sich hierbei um einen Enumerator, dem zusätzlich das Attribut [Flags] verpasst wird. Zusätzlich sind die einzelnen Werte entsprechend des Dualsystems (1,2,4,8,16,32,...) anzugeben, da diese bei Mehrfachauswahl durch ein logisches Oder verknüpft werden.

TestFlag testf = TestFlag.FlagValue1;
testf := TestFlag.FlagValue2;

In diesem Fall hat testf den Wert 3. Dieser repräsentiert FlagValue1 und FlagValue2. Durch ein

testf -= TestFlag.FlagValue1;

reduziert sich der Wert auf 2, wodurch auch nur mehr dieses Flag gesetzt ist. Abfragen können nun folgendermaßen gemacht werden:

if ( (testf & TestFlag.FlagValue1) > 0) {}

Trifft diese Bedingung zu, ist das Flag gesetzt, andernfalls würde das Ergebnis 0 sein und die Bedingung würde folgerichtig nicht zutreffen.

if ( (testf & TestFlag.FlagValue1) == 0) {}

Auf diese Weise kann festgestellt werden, ob ein bestimmtes Flag nicht gesetzt ist. Trifft die Bedingung zu ist es nicht gesetzt, andernfalls schon.

Fazit
Dies sollte einen kurzen Einblick in die Welt der Enumeratoren und Flags bieten. Flags bieten in vielen Fällen eine einfache Lösung für Mehrfachauswahlen und können auch entsprechend in UserControls abgebildet werden, um dem User eine vereinfachte Darstellung zu bieten.

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


System.IO.Compression - Hilfreich oder doch ein Scherz?

07.06.06 - Base Framework
Beitrag von Norbert Eder
 Unter dem .NET Framework 2.0 gibt es ja den System.IO.Compression-Namespace. Dieser beinhält Klassen um Dateien zu zippen. Vorgangsweise sieht so aus, dass Daten in einen Stream geschrieben werden (beispielsweise einem GZipStream). Dieser zippt danach die Daten, welche in weiterer Folge in einer Zip-Datei abgelegt werden können.

Dies funktioniert wenn man eine einzelne Datei zippen möchte. Was ist, will ein gesamtes Verzeichnis gepackt werden? Gute Frage. Bis dato konnte ich noch keine Art Zip-Container finden. Dies bedeutet, man muss sich die einzelnen Positionen der Dateien innerhalb des Streams merken bzw. an einer Stelle vermerken, um diese wieder entpacken zu können. Ein handelsübliches Zip-Programm ist damit natürlich überfordert. Dies läßt die Frage offen, ob damit proprietäre Formate unterstützt werden sollen ...

Fazit
Ich hätte mir unter diesem Namespace doch wesentlich mehr vorgestellt. So ist er für mich nicht wirklich zu gebrauchen. Schade drum.

ZUSATZ
Für diejenigen, die nicht in die Kommentare sehen, hier ein Zusatz. Jay hat einen Link gepostet, der genau dieses Manko behebt:
.NET System.IO.Compression and zip files

  4 Kommentare - 1049 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


.NET 2.0: ComboBox und AutoComplete

22.05.06 - Base Framework
Beitrag von Norbert Eder
 Unter .NET 2.0 gibt es eine sehr einfache Möglichkeit, der ComboBox eine AutoComplete-Funktion bzw. eine Vorschlags-Funktion zu verpassen.

Dazu einfach folgende Schritte ausführen:

1. AutoCompleteCustomSource setzen (zusätzlich zur normalen DataSource)
2. AutoCompleteMode auf Suggest stellen
3. AutoCompleteSource auf ListItems stellen

Fertig ist die Hexerei und der User freut sich über die verbesserte Usability. Statt Suggest (Punkt 2) gibt es auch noch weitere Möglichkeiten um eventuell eigene Einträge anzuhängen etc. Einfach mal ausprobieren.

  1 Kommentar - 1584 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


IronPython 1.0 Beta 6 verfügbar

28.04.06 - Base Framework
Beitrag von Norbert Eder
 Wer schon immer gerne über den eigenen Tellerrand geblickt hat, für den steht die Beta 6 von IronPython 1.0 [1] zur Verfügung. Dabei handelt es sich um die .NET Implementierung von Python.

Zwingend notwendig ist das .NET Framework 2.0 [2].

[1] Download IronPython 1.0 Beta 6
[2] Microsoft .NET Framework Version 2.0 Redistributable Package (x86)

Weitere Informationen

[3] IronPython Home
[4] IronPython: A fast Python implementation for .NET and Mono
[5] Python + .NET = IronPython

  1 Kommentar - 690 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


C# vs. VB.NET

08.04.06 - Base Framework
Beitrag von Norbert Eder
 Ein Thema das wohl nie enden wird. Was ist denn nun besser? C# oder VB.NET? Hier eine kleine Linksammlung zu diesem Thema, damit sich jeder selbst ein Bild davon machen kann:

[1] What are the advantages of C# over VB.NET and vice versa?
[2] VB.NET vs C#: The Great .NET Language Debate
[3] Top 10 reasons C# is better than VB.NET
[4] Complete Comparison for VB.NET and C#
[5] Yet again: VB vs C#
[6] Und VB .NET hat doch einen Sinn

Ich könnte die Liste jetzt noch weiter fortsetzen, aber ich denke diese Links sollten für eine Entscheidungsfindung reichen.
  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


C#-Beginner: Exception-Handling unter C#

02.03.06 - .NET, Base Framework
Beitrag von Norbert Eder
 Das Thema Exception-Behandlung scheint bei vielen .NET Programmierern noch nicht richtig angekommen zu sein. Immer wieder finden sich in diversen Beispielen und Fragen traurige Konstrukte, die hauptsächlich negative Erscheinungen zu Tage fördern. Also Beispiel sei hier ein neulich gesichteter Code gezeigt werden (nicht kopieren!!!!!):


try
{
StreamReader sr = new StreamReader("path");
string text = sr.ReadToEnd();
sr.Close();
}
catch (Exception ex) {}


Das Ergebnis? Nun, ist die Datei nicht vorhanden wird eine Exception geworfen und auch abgefangen, aber es passiert damit nichts. Es erfolgt weder eine Meldung an den User, noch ein Log-Eintrag, um etwaige Fehler zu einem späteren Zeitpunkt nachvollziehen zu können. Ein weiterer Effekt ist, dass beim "Testen" durch den Entwickler "alles funktioniert" - was natürlich nicht stimmt.

Nun gut, aber wie soll das Exception Handling dann wirklich umgesetzt werden? Ganz einfach. Der grundlegende try-catch-Block sieht so aus:


try {
// Implementierung
} catch (IOException ex) {
// Fehlerbehandlung für IO-Fehler
} catch (Exception ex) {
// Fehlerbehandlung für andere Fehler
} finally {
// Abschlussarbeiten
}


Hier noch eine genaue Beschreibung:

try: Im try-Teil des gesamten Blockes erfolgt die Implementierung der tatsächlichen Funktion.

catch: Hier ist die Fehlerbehandlung zu implementieren. Dies kann realisiert werden, indem die Fehlermeldungen bzw. zusätzliche Einträge in eine Log-Datei geschrieben werden oder eine User-Interaktion verlangt wird. Wie oben gezeigt, können mehrere Exceptions gezielt abgefangen und behandelt werden. In der MSDN finden sich zu allen Methoden auch Angaben darüber, welche Exceptions geworfen werden. Prinzipiell ist mit diesen Exceptions zu arbeiten und nicht direkt mit Exception selbst.

finally: Dieser Teil des Blockes wird in jedem Fall ausgeführt, also sowohl nach erfolgreichem Durchlauf des try-Teiles, als auch im Falle eines Fehlers. Dadurch bietet es sich an, im finally-Block Aufräumarbeiten durchzuführen. Dies kann beispielsweise das Schließen einer Datenbank-Verbindung sein.

Beim catch-Block muss nicht zwingend ein Typ angegeben werden. Ist dies nicht der Fall, dann werden sämtliche Exceptions behandelt. Von dieser Schreibweise würde ich jedoch eher abraten:


try {

} catch {

}


Des weiteren sollten Exception nicht für die Ablaufsteuerung einer Anwendung verwendet werden. Darunter wird verstanden, dass gezielt auf Exceptions abgefragt wird, um aufgrund des Exception-Typs zu entscheiden, welcher weitere Code anschließend ausgeführt wird. Exceptions sind sehr "teuer". Dies bedeutet, dass dadurch viele Ressourcen verbraucht werden. Daher sind Exceptions auch als solche zu behandeln.

Natürlich besteht auch die Möglichkeit eigene Exceptions zu implementieren. Dies macht vor allem bei der Entwicklung von größeren Frameworks (die auch von anderen Entwicklern benutzt werden) Sinn. Folgendes Beispiel soll eine eigene Exception verdeutlichen:


using System;
class MyException : ApplicationException
{
public MyException(string str)
{
Console.WriteLine(str);
}
}


Wie zu erkennen ist, ist von der Basisklasse ApplicationException abzuleiten. Der Konstruktor erhält einen Parameter und damit ist die einfachste Variante einer benutzerdefinierten Exception fertig. Weitere Möglichkeiten können aus der MSDN bezogen werden.

Zum Schluss möchte ich noch kurz ansprechen, wie der Programmierer selbst Exceptions werfen kann. Dies wird mittels des Schlüsselwortes throw getan:


throw new MyException("Eine benutzerdefinierte Exception ist aufgetreten");


Eine so geworfene Exception muss natürlich auch entsprechend behandelt werden.

Referenzen und weiterführende Artikel:
[1] Exception Management Architecture Guide
[2] Exception Class

  3 Kommentare - 1676 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL



Zurück Weiter