Blog Home  Home Feed your aggregator (RSS 2.0)  
artiso Blog - Tuesday, October 31, 2006
Neues rund um's Thema .Net
 
 Tuesday, October 31, 2006

Galileo Computing hat zwei neue Openbooks veröffentlicht. Diese Openbooks stehen in vollem Umfang online oder als kostenloser HTML-Download zur Verfügung. Ich finde das echt ne gute Sache, da man hier auf die Schnelle mal kurz was nachlesen kann und die Katze nicht im Sack kaufen muss. Man kann sich in aller Ruhe anschauen, was das Buch zu bieten hat und dann bei Gefallen die gedruckte Version erwerben.

Zum <openbook> JavaScript und AJAXhttp://www.galileocomputing.de/openbook/javascript_ajax/

Buch: Visual Basic 2005http://www.galileocomputing.de/openbook/visual_basic/

Tuesday, October 31, 2006 5:02:54 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Hat man eine umfangreiche Form mit vielen Controls, ist es oft nicht einfach, den Überblick über die Tab-Reihenfolge der Form zu behalten. Und für den Anwender ist es ärgerlich, wenn er bei Tastaturbedienung wild auf der Eingabemaske herum geführt wird. IN VS 2005 gibt es im Menü Ansicht hier einen Eintrag, der hier eine Lösung bietet . Ruft man den Menüpunkt Aktivierreihenfolge (Taborder) auf (ist nur verfügbar wenn das aktive Fenster eine Winform enthält), wird die Form in einem speziellen Modus dargestellt und auch der Cursor ändert sein Aussehen.

 

Die Zahlen, die nun bei jedem Control angegeben werden, geben die Tabreihenfolge an. Hat man Gruppierungselemente wie z.B. Panels, so werden durch Komma getrennt erst die Reihenfolge der Gruppen und dann die des Controls angezeigt.

Um die Tabreihenfolge zu ändern beginnt man nun einfach die Controls in genau der Reihenfolge anzuklicken, wie man sie haben möchte. Die Zahlen werden sofort angepasst.

Um den Modus wieder zu verlassn, muss man den Menüpunkt im Menü Ansicht einfach wieder deaktivieren. So einfach erhält man saubere Tabreihenfolgen.

Tuesday, October 31, 2006 11:54:31 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Monday, October 30, 2006

Es gibt eine Möglichkeit, in eine Anwendung COM-Komponenten zu integrieren und diese dann ohne Registrierung dieser Komponente einfach per XCopy oder per Click-Once-Deployment zu verteilen.

http://msdn.microsoft.com/msdnmag/issues/05/04/RegFreeCOM/default.aspx

Monday, October 30, 2006 7:11:05 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Ein wirklich gutes Dokument zum Thema Databinding in WinForms mit Visual Studio 2005 findet sich unter

http://www.windowsforms.net/Samples/Go%20To%20Market/Data%20Binding/DataBinding%20FAQ.doc#_Toc117313112

Monday, October 30, 2006 11:49:20 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Sunday, October 29, 2006

Es gibt bereits seit einiger Zeit ein deutsches MSDN-Magazin das immer zwei Ausgaben der englischen Version zusammenfasst. Online gibt es jetzt auch das Original auf deutsch übersetzt.

(Gefunden bei http://der-albert.com/)

Link to MSDN Magazin: Inhalt: November 2006

Sunday, October 29, 2006 10:27:05 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Microsoft bietet 3 kostenlose e-Learnings zu WPF, WF und WCF an.

Link to Offer Detail

Sunday, October 29, 2006 10:22:52 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    |   | 

Es gibt einen Connector, der den Team Foundation Server mit einem MS-Project Server verbindet.

Link to bharry's WebLog : New TFS - Project Server Connector available

Sunday, October 29, 2006 10:08:34 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Für Team System lassen sich auch eigene Check-In Policies erstellen. Der folgende Artikel zeigt an einem Beispiel, wie das geht. 

Link to Team System : Adding a new check-in policy

Sunday, October 29, 2006 9:59:43 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Monday, October 23, 2006

Oft hat man das Problem, dass man eindeutige, fortlaufende Nummern erzeugen möchte. In einer MultiUser-Umgebung braucht man dazu eine zentrale Instanz, die gleichzeitige Zugriffe mehrere User korrekt verwaltet, typischerweise eine Datenbank. Mit Oracle z.B. kann man diese Nummern mit Hilfe einer Sequenz erzeugen.

CREATE SEQUENCE SOPTOOLS.SEQSOPNUMMER
START WITH 1
INCREMENT BY 1
MINVALUE 0
NOCACHE
NOCYCLE
NOORDER

Die Parameter sind eigentlich weitgehend selbsterklärend. Die Meisten Beispiele findet man, wenn man nun mit Hilfe des INSERT-Befehls einen neuen Eintrag erzeugen möchte. Das sieht dann ungefähr so aus:

INSERT INTO SOPS (SOPNUMMER, SOPNAME)
VALUES (
SEQSOPNUMMER.NEXTVAL,'NeueSOP')

Damit wird ein neuer Datensatz angelegt. Dabei wird die Sequenz automatisch um eins erhöht und der neue Wert als SOPNUMMER eingetragen. D.h. wenn der Befehl mehrfach hintereinander ausgeführt wird, hat jeder Eintrag eine eindeutige SOPNUMMER. Mit .CURRVAL kann man übrigens auf die Sequenz zugreifen, ohne dass der Wert erhöht wird.

Bei mir war's aber so, dass ich einfach nur den nächsten Wert der Sequenz wollte ohne einen INSERT. Da muss man zu einem kleinen Trick greifen. Man kann die Sequenz nicht direkt abfragen, sondern immer nur in Verbindung mit einer Tabelle. Hier bietet Oracle die Pseudo-Tabelle DUAL, die für diesen Zweck super geeignet ist. Sie enthält genau eine Zeile mit einer Spalte. Damit liefert folgende Abfrage den nächsten Wert der Sequenz und erhöht die Sequenz automatisch:

SELECT SEQSOPNUMMER.NEXTVAL FROM DUAL

Monday, October 23, 2006 10:14:18 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Ich bin jetzt auch auf der Blog-Liste der DtoNetGerman Bloggers gelistet. Einfach mal vorbeischauen, dort sind sehr interessante deutschsprachige Blog versammelt. 

Link to DotNetGerman Bloggers

Monday, October 23, 2006 9:22:04 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Der Internet Explorer 7 ist jetzt in der finalen Version zum Download verfügbar. 

Link to Download details: Windows Internet Explorer for 7 Windows XP SP2

Monday, October 23, 2006 8:53:33 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

ASP.NT AJAX (früher ATLAS) ist jetzt als Beta 1 zum Donwload verfügbar.

Link to ASP.NET AJAX Web: The Official Microsoft ASP.NET AJAX Site : ASP.NET AJAX

Monday, October 23, 2006 8:49:26 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Bei Microsoft kann man sich kostenlos eine DVD mit über 50 Erweiterungen zu Visual Studio als Demo- und Testversionen bestellen.

Link to Sichern Sie sich eine Vielzahl kostenloser Partnerprodukte

Monday, October 23, 2006 8:47:18 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Sunday, October 22, 2006

Mit dem patterns & practices Guidance Explorer wird dem Entwickler ein Tool an die Hand gegeben, mit dem er entsprechende Entwicklungs-Patterns und Best Practices zu verschiedenen Themen gefunden werden können. Darüber hinaus kann man eigene Checklisten und eigene Guidance-Sets erstellen.

Link to patterns & practices Guidance Explorer

Sunday, October 22, 2006 7:14:36 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Diese Community-Seite beschäftigt sich hauptsächlich mit der Entwicklung von Software für die Windows Media Center Edition. 

Link to Code-Green.de

Sunday, October 22, 2006 7:02:39 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Monday, October 16, 2006

Will man eine Liste mit allen Werten eines enums befüllen, z.B. zur Ausgabe in einer DropDown-List, kann man folgenden Code verwenden:

foreach (int Entry in Enum.GetValues(typeof(DataLayer.LogDataLayer.LogDataLayer.LogEntryTypes)))
{
   vl.ValueListItems.Add(Entry, ((DataLayer.LogDataLayer.LogDataLayer.LogEntryTypes)Entry).ToString());
}

Monday, October 16, 2006 11:10:56 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Dieser Artikel beschreibt, wie man im Property-Grid entsprechende Dialoge einbauen kann um Dateien und Verzeichnise auszuwählen.

http://www.schlechte-doku-hasser.de/modules.php?op=modload&name=News&file=article&sid=140&mode=thread&order=0&thold=0&POSTNUKESID=92c38293a5ea7c80d8cf15115f17512b

Monday, October 16, 2006 10:20:13 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Thursday, October 12, 2006

Mit Hilfe des Property-Grids lassen sich die Eigenschaften eines Objektes ohne viel Aufwand bearbeiten. Das Handling entspricht dem Eigenschaften-Fenster im VS. Wie's gemacht wird, beschreibt folgender Artikel:

http://www.c-sharpcorner.com/Code/2004/June/PropertyGridInCSharp.asp

Thursday, October 12, 2006 10:19:17 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Ich erstelle gerade eine Anwendung, die verschiedene Berechnungen durchführt. Um möglichst flexibel zu sein, habe ich jede Berechnungsmethode in eine eigene DLL gepackt. Diese DLLs sollten nun nicht zur Compile-Zeit eingebunden werden sondern erst zu Laufzeit. Dadurch kann man jederzeit zusätzliche Berechnungsmethoden erstellen und diese dann einfach in das Anwendungsverzeichnis kopieren ohne die gesamte Anwendung neu compilieren zu müssen. Das Ganze funktioniert sogar zur Laufzeit, d.h. die Anwendung muss nicht neu gestartet werden, wenn eine neue DLL hinzukommt.

Das Ganze funktioniert so:

  1. Ich habe ein Interface erstellt, das als Schnittstelle für alle Berechnungsmethoden dient. 

    public interface IBaseEngine
    {
    void StartCalculation();
    }

  2. Dann habe ich ein Berechnungsmodul erstellt, das die Schnittstelle implementiert. Berechnungsmodul und Interface sind im gleichen Namespace:

    public class cCapaPlanerEngine : IBaseEngine
    {
    public cCapaPlanerEngine()
    {
    }

    public void StartCalculation()
    {
    // Hier kommt die Berechnung
    }
    }

  3. Nach dem Compilieren wird die DLL des Berechnungsmoduls in das Anwendungsverzeichnis kopiert.
  4. Nun kann das Berechnungsmodul instanziiert werden:

    IBaseEngine calculationEngine = (IBaseEngine)Activator.CreateInstanceFrom("CalculationEngines\\" + _CalculationEngineName + ".dll", "ScenarioGenerator.CalculationEngines.c" + _CalculationEngineName).Unwrap();

    Da sind noch ein paar statische Sachen drin, die besser in die config ausgelagert bzw. automatisch ermittelt werden, aber so ist es momentan etwas verständlicher. Wichtig ist das Unwrap() am Ende, da sonst der Typecast nicht funktioniert.
    Eine optimierte Version könnte etwa so aussehen, wobei hier in derm Berechnungsmodul nur eine Klasse stehen sollte:

    Assembly calculationEngineAssembly = Assembly.LoadFrom(Properties.Settings.Default.CalculationEnginesPath + "\\" + _CalculationEngineName + ".dll");
    calculationEngine = (IBaseEngine)Activator.CreateInstance(calculationEngineAssembly.GetTypes()[0]);


  5. Nun kann die Berechnungsmethode einfach aufgerufen werden:

    calculationEngine.StartCalculation();

Weitere Berechnungsmodule lassen sich nun einfach erstellen indem sie die selbe Schnittstelle implementieren und dann einfach in das Anwendungsverzeichnis kopiert werden.

Thursday, October 12, 2006 9:02:44 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Wem die Modifizierer in C# wie partial, virtual und volatile nicht alle im Detail bekannt sind, findet hier eine Beschreibung:

http://msdn2.microsoft.com/de-de/library/6tcf2h8w.aspx

Thursday, October 12, 2006 7:26:21 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Wednesday, October 11, 2006

 Man kann eigene enums in den Settings einer Anwendung avblegen. Dazu muss zunächst der enum definiert werden. Anschließend öffnet man die Settings-Datei des Projektes (liegt unter Properties). Im Feld Type kann man hier nun Browse... auswählen.

Dann gibt man bei SelectedType den vollqualifizierten Namen inkl. Namespace ein.

Nun kann man in der Spalte Value über eine DropDownList den gewünschten Wert für die Konfiguration auswählen. In der app.config sieht das dann so aus:

<CalculationUnitApplication.Properties.Settings>
    <
setting name="Setting" serializeAs="String">
        <
value>CapaPlaner</value>
    </
setting>
</
CalculationUnitApplication.Properties.Settings>

Auf den Eintrag kann man dann aus dem Code so zugreifen:

Properties.Settings.Default.mySetting

wobei mySetting der Name ist, der dem Eintrag in der Settings-Einstellung im Feld Name vergeben wurde. Das Ganze ist jetzt typsicher, d.h. wenn jemand die Config-Datei bearbeitet und gibt einen Wert ein, der nicht im enum vorkommt, wird eine Exception geworfen.

Wednesday, October 11, 2006 11:00:42 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Weder was zum Essen noch glänzt es, aber man wird reicher damit, zumindest an Wissen. Die MSDN-Nuggets sind Kurzfilme, die in 10-15 Min. Schritt für Schritt in ein Thema einführen. Gut davbei ist, dass man nach Thema und nach dem Niveau (Einsteiger - Experte) suchen kann.

Link to MSDN Nuggets

Wednesday, October 11, 2006 9:04:43 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Wenn auf einer DataTable ein ColumnChanged-Event eingesetzt wird um bei Änderungen eines Wertes in der DataTable andere Werte in der selben table neu zu berechnen, ergibt sich das Problem, dass das zurückschreiben der neuberechneten Werte wieder zu einem ColumnChanged führt, was den Evbenthandler erneut aufruft und so in einer Endlosschleife endet, die mit einem StackOverflow endet.

Hier gibt es eine recht simple Abhilfe. Man deregistriert den EventHandler bevor die geänderten Werte geschrieben werden und registriert ihn danach einfach wieder. Das kann dann z.B. so aussehen:

void myTable_ColumnChanged(object sender, DataColumnChangeEventArgs e)
{
   myDataSet.myTable.ColumnChanged -= new DataColumnChangeEventHandler(myTable_ColumnChanged);
   RecalculateValues();
   myDataSet.myTable.ColumnChanged += new DataColumnChangeEventHandler(myTable_ColumnChanged);
}

Wednesday, October 11, 2006 8:59:55 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Noch im Oktober wird der IE7 verfügbar sein. Wenige Wochen danach wird er auch über das automatische Update verteilt. Ob Sie bereit sind, für den IE7 können Sie hier lesen: 

Link to IEBlog : IE7 Is Coming This Month...Are you Ready?

Wednesday, October 11, 2006 5:13:52 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Monday, October 09, 2006

Folgender Code zeigt, wie man in eine Zelle im Infragistics-Grid Prozentwerte aus- und eingeben kann. Zu beachten ist hierbei, dass beim BeforeExitEditMode auf die Text-Eigenschaft zugegriffen werden muss, da der Value zu diesem Zeitpunkt noch nicht gesetzt ist.

private void ugShiftDetails_BeforeEnterEditMode(object sender, CancelEventArgs e)
{
   if (this.ugShiftDetails.ActiveCell.Column.Key == "PercentColumn")
   {
      UltraGridCell c = this.ugShiftDetails.ActiveCell;
      c.Value = ((double)c.Value) * 100;
   }
}

private void ugShiftDetails_BeforeExitEditMode(object sender, Infragistics.Win.UltraWinGrid.BeforeExitEditModeEventArgs e)
{
   if (this.ugShiftDetails.ActiveCell.Column.Key == "PercentColumn")
   {
      UltraGridCell c = this.ugShiftDetails.ActiveCell;
      try
      {
         c.Value = Double.Parse(c.Text) / 100;
      }
      catch
      {
         MessageBox.Show("Invalid Input");
      }
   }
}

Monday, October 09, 2006 3:39:22 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Friday, October 06, 2006

Die Lebensdauer eines Hosts und damit auch der Instanzen der darin enthaltenen Member kann über ein Attribut gesteuert werden. Mein konkreter Anwendungsfall war, dass ich einen Status speichern wollte, der von allen Clients über die gesamte Laufzweit meines Servers abgefragt werden kann. Der Host sollte dazu am einfachsten während der gesamten Laufzeit des Servers als einzige Instanz zur Verfügung stehen. Dazu einfach folgendes Attribut zur Host-Definition hinzufügen:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public class cClientHost : IClientInterface

Über dieses Attribut lässt sich z.B. die Lebensdauer auch für die auer einer Session einrichten.

Friday, October 06, 2006 7:07:10 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Die Fa. artiso (www.artiso.com) für die ich arbeite, sucht momentan einen .net Entwickler. Der Entwickler sollte über folgende Kenntnisse bzw. Eigenschaften verfügen:

  • C#, SQL, Winforms, ASP.Net
  • Projekterfahrung
  • Selbständiges Arbeiten

  • Qualitätsbewußtsein

Wenn jemand Inteeresse hat bzw. jemand kennt, der Interesse hat, können nähere Informationen unter tschissler@artiso.com erfragt werden.

Friday, October 06, 2006 6:46:23 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Wednesday, October 04, 2006

Speziell für IT-Manager gibt es bei Microsoft eine Webcast-Serie.

http://www.microsoft.com/events/series/itmanagerconnections.mspx

Wednesday, October 04, 2006 8:07:43 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Monday, October 02, 2006

Die Visual Studio "Orcas" September CTP kann jetzt bei Microsoft heruntergeladen werden. Die CTP wird im Moment als Virtual PC Image bereitgestellt und kann mit Hilfe von Virtual PC oder Virtual Server direkt ausgeführt werden.

Link to Download details: Visual Studio Code Name "Orcas" September 2006 CTP

Monday, October 02, 2006 1:29:59 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Friday, September 29, 2006

Paint.Net ist ein kostenloses Grafik-Tool, das umfangreiche Funktionen zur Bearbeitung von Grafiken bietet. Gerade für Entwickler düfte das Tool vollkommen ausreichen und auch eine echte Alternative zu Photshop & Co sein.

http://www.getpaint.net/

Danke an Jonas für den Link

Friday, September 29, 2006 7:29:35 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Thursday, September 28, 2006

Um in Excel Zellen bis ans Ende einer datenreihe aufzufüllen (z.B. eine Summenformel etc.), kann man einfach den zu übernehmenden Bereich markieren und dann auf das kleine Kästchen rechts unten im selektierten Bereich doppelklicken.

Ich wollte nun das gleiche Ergebnis per VBA erreichen. Dazu habe ich die zu kopierende Zelle erst mal mit dem Namen "Copy" versehen. Dann kann man mit dem folgenden Befehl das AutoFill ausführen:

Range("Copy").AutoFill Destination:=Range("H3:H" & Range("G65535").End(xlUp).Row), Type:=xlFillDefault

Damit wird der Bereich "Copy" von der Zelle H3 bis Hx kopiert, wobei x die letzte Zeile der Spalte G ist, die einen Wert enthält.

Thursday, September 28, 2006 6:53:23 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Wednesday, September 27, 2006

In seinem Blog beschreibt bharry einige Fixes und neue Features des SP1 Beta für Team Foundation Server. Scheint wohl jetzt neu zu sein, auch für Service-Packs Betas anzubieten. Na ja so kommt man früher dran und es sind hinterher hoffentlich weniger Fehler drin - mal abwarten.

http://blogs.msdn.com/bharry/archive/2006/09/26/772371.aspx

Wednesday, September 27, 2006 5:32:47 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Das Tool selber hat zwar mit .net nix zu tun, ist aber für den Entwickler trotzdem interessant. Es gibt die System-Infos auf dem Desktop aus. Funktioniert auch, wenn man eine Hintergrundgrafik eingestellt hat.

http://www.sysinternals.com/Utilities/BgInfo.html

BGInfo Screenshot

Wednesday, September 27, 2006 5:17:49 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Unter http://blogs.msdn.com/somasegar/archive/2006/09/26/772250.aspx gibt es einige Hinweise zur Beta-Version von VS 2005 SP1 sowie den Vista-Support von VS.

Wednesday, September 27, 2006 4:42:19 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Tuesday, September 26, 2006

Die September CTP des .Net Frameworks 3.0 kann unter http://www.microsoft.com/downloads/details.aspx?FamilyId=C6636E90-26E6-44E0-8780-5D3CCD3D94ED&displaylang=en heruntergeladen werden. UNter http://msdn.microsoft.com/windowsvista/support/relnotes/netfxSEPTCTP/default.aspx  finden sich bekannte Fehler und Systemanforderungen.

Tuesday, September 26, 2006 11:03:56 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Beim Databinding möchte man oft Einfluss auf die Darstellung der Werte auf der Oberfläche nehmen. Ein typischer Fall hierzu ist z.B. das Databinding mit Prozentwerten. Hier hat man z.B. einen Wert 0,5 der als 50% angezeigt werden soll. Wenn der Benutzer dann 40% eingibt, soll dieser Wert in 0,4 konvertiert werden. Hierzu kann man die Format- und Parse-Events des Databindings verwenden.

Zuerst müssen die Events definiert werden. Dabei gehen wir in dem Fall davon aus, dass es sich um das erste Databinding auf dem Control handelt.

this.txtValue.DataBindings[0].Format += new ConvertEventHandler(ValueInputPercent_Format);
this.txtValue.DataBindings[0].Parse += new ConvertEventHandler(ValueInputPercent_Parse);

Dann können in den Eventhandlern die entsprechenden Formatierungen vorgenommen werden. Dies können natürlich auch noch mit entsprechenden Fehlerprüfungen versehen werden.

void ValueInputPercent_Parse(object sender, ConvertEventArgs e)
{
  e.Value =
Double.Parse(e.Value.ToString().TrimEnd('%')) / 100;
}

void ValueInputPercent_Format(object sender, ConvertEventArgs e)
{
  e.Value = ((
double)e.Value) * 100 + "%";
}

Tuesday, September 26, 2006 11:01:11 AM (Mitteleuropäische Zeit, UTC+01:00)  #