.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

ASP.NET: Web Controls dynamisch laden

27.06.07 - .NET, ASP.NET
Beitrag von Norbert Eder
 In vielen Situationen ist es notwendig, Web Controls dynamisch in einen Platzhalter (Placeholder-Control) zu laden. Dies kann sehr einfach bewerkstelligt werden:
this.ContentPlaceHolder.Controls.Clear();
this.ContentPlaceHolder.Controls.Add
    (
    LoadControl("modules/TestControl.ascx")
    );

Das Beispiel geht davon aus, dass Web Controls im Verzeichnis modules gespeichert sind. Beim ContentPlaceHolder handelt es sich um ein ContentHolder-Control.

Natürlich kann dies auch entsprechend dynamischer gestaltet werden, da sich das zu ladende Control eventuell aus dem aufgerufenen Menüeintrag oder anderen Informationen definieren läßt.

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


Akronyme der Softwareentwicklung

26.06.07 - Kunterbunt
Beitrag von Norbert Eder
 Gerade in der Softwareentwicklung häufen sich Akronyme. Für alles werden sie verwendet. Liebend gerne für (vermeintliche) Paradigmen. Sei es nun Test Driven Development (TDD) oder gar Asshole Driven Development. Einfach in einer ruhigen Minute durchlesen und die Kommentare nicht vergessen.

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


Rude Q&A - Die etwas andere FAQ

26.06.07 - Entwicklung, Diskussionen, Qualitätsmgmt.
Beitrag von Norbert Eder
 Frequently Asked Questions (FAQ) sind hinreichend bekannt. Was aber hat es mit dem Begriff Rude Q&A auf sich? Sehr einfach erklärt.

Zu jedem Projekt (Software oder nicht) können tonnenweise Fragen gestellt werden. Manche sind für alle von Interesse (typischer Fall für eine FAQ), manche sind unangenehm und würden am liebsten nicht beantwortet werden bzw. sind ohnehin nicht für die Allgemeinheit bestimmt (sinnvoll für eine Rude Q&A). Zusammenfassend: Eine Rude Q&A enthält alle unangenehmen Fragen zu einem Produkt, Unternehmen etc.

Was bringt das nun? Fragen sind da, um sich mit ihnen zu beschäftigen, und sie auch zu beantworten. Vor allem unangenehme Fragen werden oft nicht beantwortet, sei es aus eigener Angst heraus oder bedingt durch andere Gründe. Fakt ist jedoch, dass man auf alle Fragen eine Antwort parat haben sollte. Durch die Beschäftigung mit einer Frage wird also eine Vorbereitung betrieben, die sich im Falle des Falles auf jeden Fall auszahlt. Zudem empfiehlt es sich, die notierten Fragen von Zeit zu Zeit zu überarbeiten, denn schlechte Antworten sind oft schlimmer, als gar keine.

via Scott Berkun

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


Sandcastle Help File Builder 1.5.0.0 verfügbar

26.06.07 - Tools, 3rd Party Tools
Beitrag von Norbert Eder
 Seit gestern ist die Version 1.5.0.0 des Sandcastle Help File Builders verfügbar. Großteils wurde die Version an die Sandcastle June CTP angepasst. Ebenfalls wurde einige Bugs behoben.

Sandcastle Help File Builder Homepage

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


DasBackup: Fehlermeldung bei der Synchronisation

25.06.07 - Tools, DasBackup
Beitrag von Norbert Eder
 Beim Versuch eine Synchronisation anzustarten, erscheint der Fehler Cannot synchronize as there are no properties given. Dies betrifft die aktuelle Beta-Version 1.1.3. Hier liegt ein Bug vor, der leider in diese Version hineingerutscht wird. Dadurch kann die Synchronisation nicht getestet werden. Da ohnehin in den nächsten Tagen das Release erscheinen wird, gibt es dafür kein extra Update.


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


C#: Der as-Operator

24.06.07 - .NET, Grundlagen, Base Framework
Beitrag von Norbert Eder
 

Einführung as-Operator


Der as-Operator ist ähnlich einer Cast-Operation. Im Gegensatz zu einem Cast liefert as jedoch keine Ausnahme (Exception), sondern gibt null zurück. Ein Beispiel:
object o = new MyDemoClass();
MyDemoClass mdc = o as MyDemoClass;

Die Cast-Variante würde wie folgt aussehen:
object o = new MyDemoClass();
MyDemoClass mdc = (MyDemoClass)o;

Ein Äquivalent zum as-Operator könnte so formuliert werden:
object o = new MyDemoClass();
MyDemoClass demoClass = 
  (o is MyDemoClass) ? (MyDemoClass)o : null;

Für benutzer-definierte Konvertierungen muss ein Cast verwendet werden, da dies durch den as-Operator nicht abgebildet wird (nur Referenzen und Boxing).

Performance


Bezüglich der Performance gibt es einen kleinen Unterschied, der sich allerdings erst bei einer hohen Anzahl an Durchläufen auswirkt. Ein Test mit 1 Milliarde Iterationen zeigte einen deutlichen Unterschied, sollte jedoch in der Praxis in dieser Form nicht allzu oft vorkommen. Hier die Testanwendung:
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;

namespace AsTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch sw = new Stopwatch();

            object o = new MyDemoClass();

            sw.Start();

            for (int i = 0; i < 1000000000; i++) 
            {
                MyDemoClass mdc = o as MyDemoClass;
            }

            sw.Stop();
            Console.WriteLine("as: " + 
                sw.ElapsedMilliseconds);
            
            sw.Reset();
            sw.Start();

            for (int i = 0; i < 1000000000; i++)
            {
                MyDemoClass mdc = (MyDemoClass)o;
            }

            sw.Stop();
            Console.WriteLine("cast: " + 
                sw.ElapsedMilliseconds);

            Console.ReadKey();
        }
    }

    public class MyDemoClass 
    {
    }
}

Output
as: 6135
cast: 5583

Fazit


In vielen Fällen wäre der as-Operator einem Cast vorzuziehen, da hier einer eventuellen Exception vorgebeugt werden kann (im Falle eines Casts müsste davor via is-Operator überprüft werden, ob es sich um den gewünschten Typ handelt). Auf jeden Fall muss das Objekt anschließend auf null überprüft werden.

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


Visual Studio 2005: Refactoring-Performance verbessern

24.06.07 - .NET, Visual Studio
Beitrag von Norbert Eder
 Mit zunehmender Projektgröße wird auch das integrierte Refactoring ständig langsamer, bis es schließlich überhaupt nicht mehr verwendbar ist. Äußerst schlimm ist dies bei Web Projekten. Hintergrund ist der, dass so gut wie jeglicher Content für das Refactoring herangezogen wird. Eine Möglichkeit, einzelne Projekte auszuwählen oder bestimmte Teile der Solution nicht mit einzubeziehen ist ebenfalls nicht vorhanden. Dennoch gibt es eine kleine Variante, welche das Refactoring deutlich beschleunigt. Wie in vielen Fällen ist die Lösung über die Registry möglich:

1. Alle offenen Visual Studio 2005 Instanzen schließen
2. regedit starten
3. HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\
CSharp\Options\Editor
4. Neuer Eintrag: "Neuer DWORD-Wert"
5. Dem Eintrag den Namen OpenAllVenusFilesOnRefactor verpassen und den Wert auf 0 belassen

Nach einem Neustart sollte nun das Refactoring deutlich schneller laufen, ASP.NET Pages, Inline .asmx und .asax Code werden nicht mehr berücksichtigt.

Wer die Startzeit von Visual Studio 2005 verbessern möchte, sei auf den Eintrag Visual Studio 2005 schneller starten verwiesen.

Und noch ein Hinweis: Refactoring gibt es auch für Visual Basic 2005. Hierfür einfach Refactor! verwenden.

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


Was hat ein Formel1 Auto mit We are the champions von Queen zu tun?

23.06.07 - Kunterbunt
Beitrag von Norbert Eder
 Seht selbst.

Ein paar Sekunden sind quasi Aufwärmrunde, ab ca. 40 Sekunden geht es dann los. Und gut zuhören ;-) Klingt auf jeden Fall ganz nett :)

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


Visual Studio 2005: Region-Blöcke per Tastatur auf- und zuklappen

23.06.07 - .NET, Visual Studio
Beitrag von Norbert Eder
 Regions sind eine sehr nette Sache, möchte man Methoden, Eigenschaften, Attribute oder andere zusammengehörigen Teile einer Datei in Bereiche unterteilen. Wer nun aber möglichst wenig zur Maus greifen möchte, stellt sich sehr schnell die Frage, wie denn Regions-Blöcke per Tastatur auf- bzw. zugeklappt werden können:

STRG+M STRG+M

Und schon wieder ein Griff weniger zur Maus. Dass es doch tatsächlich immer wieder Tastenkombinationen gibt, die man ständig vergisst ...

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


Visual Studio 2005: Anpassung Class Template

23.06.07 - .NET, Visual Studio
Beitrag von Norbert Eder
 Im Beitrag Visual Studio: Anpassung Class Templates habe ich bereits beschrieben, wie die Klassen-Templates (wird verwendet beim Anlegen einer neuen Klasse) an eigene Bedürfnisse angepasst werden können. Hier nun, wie dies unter Visual Studio 2005 gemacht werden kann.

Die Class-Templates können unter
C:\Programme\Microsoft Visual Studio 
8\Common7\IDE\ItemTemplatesCache\CSharp\1033\Class.zip\

gefunden werden (liegen also in einem anderen Pfad, als unter Visual Studio 2003). Im darüberliegenden Verzeichnis finden sich übrigens die Templates für die AssemblyInfo, Form, den Installer und alle anderen bekannten Templates. Diese sind weiters in die jeweiligen Programmiersprachen unterteilt, wodurch auch VB.NET-Entwickler ihre Templates schnell finden sollten.

Standardmäßig sieht das Class-Template so aus:
using System;
using System.Collections.Generic;
using System.Text;

namespace $rootnamespace$
{
    class $safeitemrootname$
    {

    }
}

So manchem stört das fehlende public, sowie auch - in einigen Fällen - vordefinierte Regions. Durch folgende Anpassung der Vorlage gehört dieser Missstand der Vergangenheit an:
using System;
using System.Collections.Generic;
using System.Text;

namespace $rootnamespace$
{
    public class $safeitemrootname$
    {
    #region Attributes
    
    #endregion
    
    #region Properties
    
    #endregion
    
    #region Private Methods
    
    #endregion
    
    #region Public Methods
    
    #endregion
    }
}

So einfach wie diese Erweiterung können auch zusätzliche Namespaces eingetragen werden.

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



Zurück Weiter