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
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 
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 + "%"; }
User-Controls werden im Designer von Visual Studio genauso instanziert wie zur Laufzeit. Um hier unterscheiden zu können, kann man mit der Variable DesignMode abfragen, in welchem Modus die Komponente momentan initialisiert wird. Die ist z.B. sinnvoll, wenn man beim instanzieren auf Objekte zugreift, die im DesignMode gar nicht zur Verfügung stehen. Hier ein kleines Beispiel:
public MyControl() { InitializeComponent(); if (!DesignMode) { try { shiftConfiguration.ReadXml(ConfigurationManager.AppSettings["ShiftConfigFile"]); } catch (Exception ex) { MessageBox.Show("Error reading Shift Configuration File\n\nError : " + ex.Message); } } }
Ich habe heute ein Update meiner Blog-Software eingespielt. Es gibt da im Moment noch ein paar kleinere Probleme z.B. mit den Kommentaren. Ich bin dabei das zu beheben. Wenn jemand sonst noch Fehler auffallen, bitte mir kurz melden.
Als Erweiterung zu meinem Beitrag zum Übernehmen von Excel-Daten über die Zwischenablage (http://www.artiso.com/ProBlog/PermaLink,guid,2017b61d-19f4-4e4a-a033-cbf820d2b18e.aspx) hier nun das Gegenstück, Daten über die Zwischenablage an Excel übergeben:
string Data = "1,1;2,7;3,1;4,8;5,9"; Byte[] ClipboardData = Encoding.UTF8.GetBytes(Data); MemoryStream ClipboardStream = new MemoryStream(ClipboardData); DataObject DataObj = new DataObject(DataFormats.CommaSeparatedValue, ClipboardStream); Clipboard.SetDataObject(DataObj, true);
Daten über mehrere Zeilen werden übrigens mit Environment.NewLine getrennt.
Der nachfolgende Code zeigt, wie JPEG Grafiken (und ebenso auch andere Formate) verlustlos rotiert werden können:
Image i = Image.FromFile(this.imageFilename); ImageCodecInfo usedIC = this.GetEncoderInfo("image/jpeg");
System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.Transformation;
EncoderParameters encparams = new EncoderParameters(1); EncoderParameter encparam = new EncoderParameter(encoder, (long)EncoderValue.TransformRotate270); encparams.Param[0] = encparam;
i.Save("filename.jpg", usedIC, encparams );
i.Dispose(); i = null; GC.Collect();
Quelle: http://blog.norberteder.com/index.php?entry=entry060920-223506
.net bietet keine Funktion, um eine Form einfach auszudrucken. Diese Lücke schließt nun Microsofts PrintForm Component 1.0.
http://www.microsoft.com/downloads/details.aspx?familyid=286111b0-6965-46cc-bf6f-c5ee63b1f98c&displaylang=en#filelist
Damit läßt sich bereits mit 2 Zeilen Code eine Form ausdrucken.
this.printForm1.Form = this; this.printForm1.Print();
Die Komponentebietet darüber hinaus noch eine Vielzahl von Einstellmöglichkeiten, z.B. zur Anzeige einer Druckvorschau etc.
Übrigens nicht durch den Namespace (Microsoft.VisualBasic.Powerpacks) irritieren lassen, die Compunente funktioniert auch unter C# 
User-Controls können auch mit eigenen Events erweitert werden. Das ist eigenlich recht simpel. Man definiert einfach einen Event, z.B.
public event EventHandler LinesChanged;
Dann ruft man an der Stelle, an der der Event ausgelöst werden soll einfach den Event auf. Das geht am einfachsten über:
LinesChanged(this, EventArgs.Empty);
Der Event kann dann außerhalb des User-Controls wie gewohnt mit einem Eventhandler ausgewertet werden. Möchte man mehr Informationen als den Sender übergeben, erstellt man sich einfach eine Klasse, die man von EventArgs ableitet und übergibt dann eine Instanz dieser Klasse beim Aufruf des Events, z.B.
public class MyEventArgs : EventArgs { private string msg;
public MyEventArgs( string messageData ) { msg = messageData; } public string Message { get { return msg; } set { msg = value; } } }
Damit der Eventhandler nun auch noch den richtigen Datentyp für die EventArgs übergeben bekommt braucht mann noch ein Delegate, z.B.
public delegate void MyEventHandler(object sender, MyEventArgs e);
Der Event muss nun entsprechend deklariert werden:
public event MyEventHandler LinesChanged;
Um den Eventhandler nun zu erzeugen, legt man in der umgebenden Klasse eine Instanz des Objektes an, das den Event wirft. Auf dieser Instanz kann man nun den Event mit dem Handler verbinden. Das geht in VS ganz einfach. Man gibt z.B. ein:
MyControl.LinesChanged +=
Dann drückt man zweimal Tab und schon hat man den Eventhandler angelegt. Fertig sieht das dann ungefähr so aus:
MyControl.LinesChanged += new UControl.MyEventHandler(MyControl_LinesChanged)
void MyControl_LinesChanged(object sender, MyEventArgs e) { throw new Exception("The method or operation is not implemented."); }
Mit WCF (Windows Communication Foundation) lassen sich Service orientierte Architekturen (SOA) implementieren. Der Vorteil gegenüber bestehenden technologien besteht darin, dass die eigentliche Schnittstelle von dem Nachrichtenformat und dem Transportweg unabhängig ist, d.h. mann kann einfach durch Konfiguration bestimmen, ob die Kommunikation über HTTP, TCP, MSMQ, Named Pipes etc. stattfinden soll und ob der Nachrichtenaustausch über SOAP/XML, Binärserialisierung etc. erfolgen soll. WCF ist bestandteil von .net 3.0
Im Rahmen eines Projektes habe ich begonnen, mich mit der WCF zu befassen. Die ersten Ergebnisse sind in dem folgenden Tutorial beschrieben. Das Dokument soll einen einfachen Einstieg in WCF bieten. Windows Communication Foundation Tutorial.pdf (847,8 KB)
Vor kurzem habe ich hier gepostet, wie man Debug-Informationen ausgeben kann. Hier noch eine kleine Ergänzung. Man kann den Debug-Informationen auch noch Informationen über die Quelldatei, das Modul und die Zeile ausgeben. Dazu dient der folgende Code:
Debug.WriteLine("Quelledatei = " + new StackFrame(0, true).GetFileName() + "\nMethode = " + new StackFrame(0, true).GetMethod() + "\nZeile = " + new StackFrame(0, true).GetFileLineNumber() + "\n");
Gefunden bei Dani.Net
Unter http://www.netfxguide.com/ finden sich jede Menge Links zu Webkasts, Tutorials, Artikel etc. zum Thema .Net 3.0. Die Inhalte sind in die Rubrichen WCF, WPF, WF und sonstiges gegliedert.
Auf Dani.NET habe ich folgenden interessanten Beitrag gefunden:
In wohl praktisch jeder Applikation müssen Settings für den Mail-Versand gespeichert werden - SMTP-Hoster, statische Sender-Adresse etc. Wer das wie ich bis jetzt immer mit eigenen Konfigurations-Abschnitten gelöst hat, der soll hier belehrt werden src="http://blogs.dotnetgerman.com/dani.net/smilies/happy.gif"> : <configuration> (...) <system.net> <mailSettings> <smtp from="info@mydomain.com"> <network host="my.smtp.host"/> </smtp> </mailSettings> </system.net> (...) </configuration>
So sieht ein entsprechender built-in Dokumentations-Abschnitt aus. Natürlich wäre es zB. auch möglich, entsprechende Credentials für den SMTP-Server zu definieren.
Wenn nun ein Mail-Objekt erstellt wird und über die Klasse SmtpClient versendet wird, werden automatisch die entsprechenden Daten aus dem Config-File genommen.
Heute habe ich mir mal Outlook 2007 näher angeschaut und dabei bin ich über die Funktion gestolpert, mit der Outlook RSS Feeds lesen kann. Eigentlich bin ich mit dem SharpReader, den ich bisher einsetze, ganz zufrieden. Einzig sört mich, dass ich auf verschiedenen Rechnern nicht sauber synchronisieren kann, welche Einträge ich schon gelesen habe.
In Outlook werden die Einträge der Feeds werden in Outlook als Nachrichten auf dem Exchange-Server abgelegt. Daraus ergeben sich zwei Vorteile:
1.) Die Einträge stehen auf allen Rechnern zur Verfügung. Auch der Status (gelesen / ungelesen) wird für alle Outlook-Clients zur Verfügung gestellt.
2.) Ich kann die Einträge auch offline lesen. Dazu bietet Outlook auch die Möglichkeit, den kompletten Eintrag als HTML-File lokal zu speichern.
Total begeistert war ich dann, als ich feststellte, dass ich sogar mit meinem Outlook 2003 auf die heruntergeladenen Einträge Zugriff habe. OPML-Files können übrigens über die Import / Export-Funktion von Outlook importiert und auch wieder exportiert werden.
Nachträgliche Einstellungen können über einen etwas versteckten Dialog vorgenommen werden: Tools / Options / Mail Setup / E-mail Accounts / RSS-Feeds
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 ha | |