Archive for the ‘.NET’ Category

ListBoxItem Template…

Friday, October 30th, 2009

Wir haben hier für die ListBox ein eigenes Template gemacht, dass eben alle ListBoxen bei uns in der Anwendung gleich aussehen… dabei haben wir einfach das Beispiel aus der MSDN verwendet: ListBoxItem ControlTemplate Example

Eigentlich sollte man ja meinen, dass dies Beispiel zumindest einigermaßen funktioniert… leider weit gefehlt…

Das Problem ist: Sobald wir ein eigenes DataTemplate für spezielle Daten gemacht haben, hat ein Klick auf ein Element nur dann reagiert, wenn entweder genau auf den Rahmen des Items geklickt wurde oder genau auf den Text:
ListBoxItem

Es ist also relativ schwer z.B. das “!” genau zu treffen…wir haben ewig gesucht, bis wir endlich den Grund gefunden haben… (dank Franks Unterstützung haben wir es mittels Snoop und der Event-Ansicht gefunden): Der Border in dem ControlTemplate hat keine Hintergundfarbe. Somit ist der Border “durchsichtig” (bzw. “x:Null”), was dazu führt, dass ein Klick auf den Border nicht vom Border verarbeitet wird, sondern vom darunterliegenden Scroll-Container… und der macht natürlich hier nichts damit…
Hier ist auch ein Beispielprojekt (VS2008), damit man es mal selber probieren kann.

Für uns jetzt mal die Lösung: Wir setzen einfach die Hintergrundfarbe des Borders des ControlTemplates auf “Transparent”, dann wirken sich jetzt überall die Klicks auf die ListBox aus… danke an Hendrik für diesen Hinweis!

VS2010 Beta 2 - jetzt öffentlich verfügbar!

Wednesday, October 21st, 2009

Seit einigen Tagen konnte ja schon MSDN Abonenten die Beta von Visual Studio 2010 runterladen. Ab sofort ist es auch als öffentlichen Download verfügbar:
Microsoft Visual Studio 2010 Ultimate Beta 2 - ISO

Und wer sich gleich noch über die Neuerungen in der MFC informieren will (ja die gibt es!), kann sich hier ein Video anschauen:
Pat Brenner: Visual Studio 2010 - MFC and Windows 7

CurrentItem einer ObservableCollection ermitteln/ändern

Thursday, October 15th, 2009

In letzter Zeit mach ich mehr mit WPF rum. Hierbei spielt ja das MVVM-Pattern eine große Rolle. Darin werden für änderbare Listen oft eine “ObservableCollection” verwendet. Diese informiert alle beteiligten darüber, wenn ein Element gelöscht oder hinzugefügt wurde. Auch unterstützt es dabei das Feature eines “CurrentItems”. Nur konnte ich dieses bisher nie über irgendwelche Methoden aus dem View-Model heraus ansprechen… immer nur durch WPF-Elemente war dies möglich. So hat z.B. eine ListBox das Property “IsSyncronizedWithCurrentItem“. Damit werden Änderungen am “CurrentItem” durch andere Controls (z.B. durch andere ListBoxen) automatisch auch in alle “angeschlossenen” übernommen.
Nur aus meinem ViewModel war es mir noch nicht gelungen das “CurrentItem” zu setzen (z.B. nach Button-Klick), da ich keine Methode oder Property finden könnte.
Jetzt hab ich es endlich gefunden wie man auf das “CurrentItem” zugreift: Man muss sich zuerst die “DefaultView” der Collection holen. Dann kann man auch die Position des aktuelle Items ändern.
z.B. um das “CurrentItem” zu setzen:

var dv = CollectionViewSource.GetDefaultView(viewModel.MeineCollection);
dv.MoveCurrentTo(viewModel.MeineCollection[1]);

oder um das CurrentItem auszulesen:

var dv = CollectionViewSource.GetDefaultView(this.List);
MessageBox.Show(dv.CurrentItem.ToString());

Hier gibt es auch ein kleines Beispielprojekt: WPF_CurrentItem.zip

Windows 7 installiert…

Sunday, October 11th, 2009

Nachdem ich auf meinen Wohnzimmer-Rechner schon vor einigen Wochen von Mac OSX auf Windows 7 Ultimate umgestiegen bin, hab ich das ganze vor zwei Tagen auf mit meinem Hauptrechner gemacht. Hier hatte ich vorher Vista 64 Ultimate drauf. Da ich mit der Partitionierung nicht ganz zufrieden war, hab ich mich entschieden alles neu zu installieren und das Ding ganz Platt zu machen.
Zuerst habe ich mit Acronis TrueImage Home 2010 eine Sicherung gemacht und dann die Windows 7 Ultimate x64 installation gestartet. Ich muss sagen: Die Installation hat ca. 25 min. gedauert und er hat alle Hardware in meinem Rechner erkannt (RAID, Soundekarte (die kannte Vista nicht), usw.).

Alles im allem muss ich sagen, dass ich sehr zufrieden bin. Leider musste ich dann natürlich wieder alles installieren, was man so braucht… und die Daten wieder rüberkopieren.

Also, ich kann es nur empfehlen auf Windows 7 umzusteigen. Es macht einen schönen und performanten Eindruck.

Jetzt dürft ihr auch gerne zu meiner Windows 7 HouseParty kommen ;)

Lang lebe C/C++!

Friday, October 2nd, 2009

Nun ja, zumindest in der embedded Welt:
Silverlight & Windows Embedded CE 6.0 R3: ein Traumpaar!

Grob zusammen gefasst: Es wird Silverlight auf Windows Embedded geben, aber das “Code-Behind” ist C/C++ über COM!

Wenn dass mal nicht ein Schritt in die richtige Richtung ist!

TFS: Check-In Kommentare automatisch in Source-Code einfügen

Friday, July 24th, 2009

TFS ist ja was wunderbare… nur wer bisher ohne sowas gearbeitet hat, oder cvs genutzt hat, der hat meistens seine Änderungen direkt im Header/Footer seiner cpp/h-Datei reingeschrieben. Dies hatte den großen Vorteil, dass man direkt zwei Dateien vergleichen konnte und sofort gesehen hat, wer was gemacht hat.
Dies geht so mit dem TFS nicht. Man benötigt immer den Team Explorer (oder VS) um die Kommentare einer Änderung zu sehen.
Es ist also so nicht so einfach möglich “disconnected” zu arbieten und trotzdem zu jeder Datei die ganzen Änderungen (zumindest anhand den Kommentaren) zu erkennen.

Im cvs gab es sowas wie ein “keyword-substitution“. Damit konnte man z.B. “$log$” in einen Kommentar seines Source-Codes einfügen und das cvs hat beim Check-In automatisch den Kommentar in die Source-Datei eingefügt.

Sowas habe ich auch für den TFS gesucht aber nicht gefunden. Mir wurde an diversen stellen gesagt, das sowas nicht geht…

Jetzt habe ich mich gestern selber drangemacht es zu probieren ;)

Und voila: Es klappt…
Habe nun ein kleines VS-PlugIn geschrieben (Check-In Policy), welche beim Check-In in den TFS den Kommentar in die Source-Datei reinschreibt, wenn dort ein “$log$” Eintrag vorhanden ist.

Ich bin jetzt wirklich begeistert!
Das Ding tut einwandfrei… hab es jetzt sogwar soweit, dass man es ganz hübsch parametrieren kann; d.h. man kann ganz frei “Templates” vorgeben, wie die Kommentare aussehen sollen.

Hier mal zwei Beispiele:

Man kann die Kommentare entweder von oben nach unten einfügen lassen:

/**************************************************************
 *
 *  Description: ...
 *
 *  History
 *  -------
 *
 *    Date   |Author | Comment
 *  ---------+-------+----------------------------------
 *  24.07.09 | kalmb | sdfsdf sdfsdf sdfs
 *  24.07.09 | kalmb | Zeile 1
 *           |       | Zeile 2
 *           |       | Zeile 3
 *           |       | Zeile 4
 *  24.07.09 | kalmb | sdafsdgdgdfsgsdfgdfsgdsfgdfs
 *  24.07.09 | kalmb | fgd dsfgdfsgdsfgdfgd
 *  24.07.09 | kalmb | asdasdf sadfsfsfsdfasdfas
 *  $log$
 *
 **************************************************************
 */

Oder auch von unten nach oben (wie cvs):

/*
 * $log$
 * 
 * Comment: Nochmals eine Änderung
 * User: DOMAIN\name
 * DateTime: 2009-07-23 22:04:22
 * Change: edit
 * 
 * Comment: dsfsdfsdfsd
 *          sdfsdfgsdfhgf hdfhfdghdfghfgdh
 * User: DOMAIN\name
 * DateTime: 2009-07-23 22:00:36
 * Change: edit
 */

Aus meiner Sicht ist dies das beste PlugIn, was ich seit langem gesehen habe ;)

Was meint Ihr dazu?
Wer interesse hat, darf sich gerne bei mir melden…

EDIT: Gestern hab ich meine “Keyword Substitution Check-In Policy” auf Codeplex veröffentlicht: http://logsubstpol.codeplex.com/

Simples XAML führt mich zur Verzweiflung…

Thursday, July 2nd, 2009

Wer schon mal extensiver mit XAML (WPF) zu tun gehabt hat, der weiss: Debugging von DataBinding ist nicht so ganz trivial…

Ich hatte heute einen ganz simplen Cut-n-Past Error: Habe ein Binding Expression der Form

<Label Text="{Binding Path=Test}" />

in ein MultiBinding eingefügt… wer nun schon mal mit MultiBindings gearbeitet hat weiss, dass man dazu nicht die “Kurzform” mit den geschweiften Klammern verwendet, sonder das ganze in die “Elemente” reinschreibt… also aus dem obigen Beispiel wird dann ein

<Label>
  <Label.Text>
    <Binding Path="Test}" />
  </Label.Text>
</label>

So… das sieht ja einfach aus ;) jetzt hab ich aber beim Copy-and-Paste dummerweise die geschweifte Klammer am Ende mitkopiert… dann noch einige Zeit weitergearbeitet… und dann wollte ich starten… lies sich auch alles wunderbar compilieren…
Nach dem Start kam aber das böse Erwachen…. ich hab min. 1 Stunde gesucht (und dabei in den tiefen des .NET-Source-Codes debuggt) bis ich den Fehler gefunden habe.

Der Grund: Es kam nicht wie sonst üblich eine Debug-Ausgabe, dass er das Property “Test}” nicht finden kann!
Sondern es kam eine “System.FormatException”… so und jetzt Ihr ;) (nein, das war schon die InnerException!)

Also, nach langem suchen hab ich tatsächlich ein Bug in WPF gefunden ;)
Wenn Trace-Ausgaben aktiv sind, dann wird der Text in “Path” einfach ungeprüft der StringBuilder.AppendFormat-Methode als Formatstring übergeben… da aber in meinem Fall eine geschweifte Klammer drin war, konnte der String natürlich nicht erfolgreicht formatiert werden… deshalb die Exception (die mir aber nun mal gar nicht weitergeholfen hat).

Hab es mal gemeldet:
VS2008-SP1: FormatException in MS.Internal.AvTrace if Binding.Path contains curly braces…
VS2010-B1: FormatException in MS.Internal.AvTrace if Binding.Path contains curly braces…

Bitte abstimmen, ob Ihr den auch wichtig findet… (ich persönlich finde ja das ganze Debuggen des DataBindungs hundsmiserabel).

Ich hab es getan…

Saturday, June 6th, 2009

Ich bin tatsächlich von meinem Standard-Suchanbieter “google” zu “bing.com” gewechselt ;)
Bisher überzeugt mich Bing! Auch die “Related Searches” sind recht gut. Mir ist gerade noch nichts (wesentliches) aufgefallen, wo google besser sein sollte… (ausser bei Newsgroups-Suche).
Ich werde dies jetzt mal so lassen und mal schauen, wie es sich entwickelt.
Er findet sogar bei der Suche nach “CreateFile” sofort die passende API! Das konnt live-search nicht (da kam es erst auf der 2. Seite).
Auch gefällt mit der Hintergrund auf der Bing-Startseite besser als bei Google; auch die kleinen Infos zu dem Bild sind sehr hübsch…

Zumindest habe ich aktuell auch mehr vertrauen zu MS als zu Google, was die Speicherung “privater Daten” angeht. Google wird mir da langsam zur “Krake”…

PS: Was man machen sollte, ist die Ländereinstellung auf “United States (Deutsch)” umzustellen (ganz oben rechts); dann hat man auch alle neuen Features ;)

Zugriff auf Virtual Earth SOAP API aus native C/C++ via gSOAP

Monday, April 27th, 2009

Um von einer native C/C++ Applikations auf das Virtual Earth SOAP-API zugreifen zu können sind einige Schritte notwendig.
In einem Beispielprojekt hab ich diese mal realisiert und auf MSDN Code Gallery zur Verfügung gestellt.

Das Projekt kann hier runtergeladen / angeschaut werden:
Virtual Earth SOAP API with C/C++ via gSOAP

C++/CLI Rätsel: Wie sieht der Callstack aus?

Saturday, April 18th, 2009

Hier ist ein kleines Rätsel aus meiner C++/CLI Schulung, die ich letzte Woche gehalten habe:

Der Code wurde mit “/clr” kompiliert (das ist wichtig).
Kann mir jemand sagen, wie der genaue Callstack innerhalb der Methode “Foo” aussieht?
Und: Wie kann man indirekt nachweisen, was genau passiert?
Meine Schulungsteilnehmer dürfen natürlich nicht mitmachen, die wissen es ja schon ;)

struct V
{
  V() {}
  V(const V &v) 
  {
    this->i = v.i;
  }
  int i;
};
 
class C
{
public:
  void CallFoo()
  {
    V v;
    Foo(v);
  }
  virtual void Foo(V v)
  {
    // TODO: Wie sieht der Callstack aus?
  }
};
 
int main()
{
  C c;
  c.CallFoo();
}

Lösungen können als Kommentare gepostet werden.
Ein kleiner Hinweis noch: VS208 zeigt nicht den exakten Callstack an, aber er zeigt, dass da irgendwas noch passiert sein muss ;)

Schulung in C++/CLI!?

Thursday, April 16th, 2009

Ist Euere Firma gerade dabei, doch einmal die .NET-Welt zu erkunden?
Habt Ihr aber sehr viel C/C++-Code, der am besten Wiederverwendet werden soll?

Dann wäre vielleicht ein Einstige in C++/CLI eine gute Lösung und bestehende Buisness-Layers .NET-Konform zu machen oder den Datenaustausch mit .NET-Dingen zu ermöglichen.

Letzte Woche habe ich eine Schulung über C++/CLI durchgeführt.
Das Thema ist sehr umfangreich und beinhaltet u.a. eine Einführung in .NET, native InterOp, COM-InterOp / MFC-InterOp, usw.

Wer also Interesse an einer Schulung hat, darf sich gerne bei mir melden.

Wird es doch einen Jet-Treiber für x64 geben!?

Thursday, April 16th, 2009

Als ich vor drei Jahren zum ersten Mal x64 Systeme getestet habe, musste ich sehr schnell feststellen, dass es (leider) keinen Jet-Treiber gibt.
Nun scheint sich bei MS doch ein Wandel vollzogen zu haben. Office 2010 wird es zumindest als (native) x64-Version geben. Somit ist die Hoffnung groß, dass es vielleicht auch einen “offiziellen” Jet-Treiber für x64-Applikationen geben wird.

Wir lassen uns also überraschen…

Windows 7 .NET-InterOp

Thursday, April 16th, 2009

Da Windows ja immer noch reiner native Code ist ;) stellt MS jetzt ein Windows-7 .NET-InterOp-Sample zur Verfügung.

Viel Spass damit…

Office Sharepoint Designer 2007 ist nun kostenlos

Thursday, April 2nd, 2009

Der Office Sharepoint Designer 2007 ist nun ein kostenloser Download!

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=baa3ad86-bfc1-4bd4-9812-d9e710d44f42

IE8 macht Class-Wizard von VS2005 / VS2008 kaputt

Sunday, March 29th, 2009

Das ist mal wieder ein super Beispiel von ausführlichen Tests bei MS:
Nachdem Du IE8 installiert hast, geht der Class-Wizard von Visual Studio 2008 (incl. SP1) nicht mehr.
Es kommen dauernd irgendwelche Script-Fehler:
Visual Studio 2008 bug after installing IE8

Es gibt aber ein Workaround, bis ein “echter” Hotfix verfügbar ist:

  • regedit öffnen
  • Unter HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones
    einen Schlüssel mit dem Namen 1000 anlegen (wenn er nicht schon da ist)
  • Unter diesem Schlüssel 1000, ein DWORD-Eintrag anlegen:
    • Name = 1207
    • Type = REG_DWORD
    • Data = 0×000000

Visual Studio 2008 hotfix for IE8

Die gezippte reg-Datei kann man sich auch runterladen.

Nur der vollständigkeit halber: Auf Connect gibt es auch schon seit 9 Tagen einen Eintrag…

Kleine Ergänzung: Das Problem tritt auch mit VS2005 auf; der Workaround funktioniert aber wohl nur, wenn das SP1 installiert wurde.

Hier gibt es auch mehr Infos vom VC-Team.

Outlook 2007 - Hotfixes…

Thursday, March 12th, 2009

Wer schon mal mit Notes gearbeitet hat, der weiss, wie schön doch Outlook sein kann ;)

Leider hat Outlook 2007 aber immer noch Fehler ;) auch ich kämpfe öfters mit solchen; vor allem beim Starten…
Deshalb gibt es jetzt einen Hotfix, den man auch sofort anfordern kann (einfach auf den Link ganz oben drücken):
Beschreibung: des Outlook 2007 Hotfix-Pakets (Outlook.msp): 24. Februar 2009

Wie der Name von “Server 2008″ entstand

Thursday, March 12th, 2009

Ich bin zwar schon über ein Jahr zu spät… aber ich habe das Video erst heute wieder gefunden.

Und damit ich es nicht nochmals suchen muss, landet es jetzt hier:

Man glaubt gar nicht, wie schwer es immer ist so einen neuen Namen zu erfinden…

Link: YouTube

Debugging .NET Apps wird ab .NET4 besser…

Wednesday, December 10th, 2008

Eines der größten Nachteile in der aktuellen .NET-Welt ist der sehr schlechte support für das Debuggen von MiniDumps. Dies ist aktuell nur mit sehr viel Aufwand möglich. Geschweige denn, dass es irgendeine Unterstützung gäbe um den .NET Source-Code anzuzeigen.
Es gab mal eine WinDbg-Version (6.7.5.0) die dies konnte. Das war aber ein “Missverständniss” und diese Version wurde 3 Tage später wieder aus der offizielen Seite entfernt. Der Grund ist wohl, dass hier undokumentierte Schnittstellen des CLR-Teams verwendet wurden. Und wie dies bei MS so üblich ist, kann man nicht einfach zwischen zwei Teams kommunizieren. Das geht nunmal nicht.
Das ist auch der Grund, warum nun von WinDbg-Team ganz offiziell die Zusammenarbeit mit dem CLR-Team beendet wurde. Es wird also in absehbarer Zeit keine .NET-Unterstützung in WinDbg geben (Anmerkung: sos.dll kommt *nicht* vom WinDbg-Team sondern vom CLR-Team!).

Auf der PDC wurde jetzt aber dieses Jahr doch ein neues “Konzept” für das Debuggen von .NET4-Applikationen vorgestellt. Es wurde (endlich) erkannt, dass es doch wichtig ist z.B. (Mini-) Dumps zu analysieren. Deshalb haben sie wohl das ganze Debugging in .NET4 umgestellt und diese Unterstützung auch mit eingebaut. Endlich mal gute Nachrichten für .NET.

Mehr Infos gibt es hier:
CLR 4.0 advancements in diagnostics

Die Neuerungen sind u.a.:

  • Managed dump debugging
  • Profiler attach (and detach) for memory diagnostics and sampling
  • Registry-free profiler activation
  • x64 mixed-mode debugging
  • lock inspection
  • Corrupted-state exceptions

Übersetzungsdienst im MSN-Messenger..

Friday, December 5th, 2008

Wer öfters mit dem MSN-Messenger arbeitet, kann jetzt auch einen “Übersetzer” verwenden. Sieht eigentlich ganz nett aus ;)
mtbot@hotmail.com
Siehe dazu auch http://www.windowslivetranslator.com/Default.aspx bzw. http://wltbot.spaces.live.com/

TechEd Barcelona - Windows Server Logo/Certification Programm

Tuesday, November 11th, 2008

Nachdem ich jetze hier auf dem “App Readiness 2008 (R2)” Stand bin, hab ich mich da auch mal ein wenig eingearbeitet ;)
Es gibt jetzt ein kostenloses Tool um den (einfachen) Level “Works with …” zu erreichen. Dabei ist mir auch aufgefalen, dass es das “Certified for…” Programm auch kostenlos zum Download gibt. Und dabei ist mir wiederum aufgefallen, dass es ein schoenes Tools gibt um z.B. vor einer Installation und danach ein Snapshot des Systems zu machen und diese beiden zu vergleichen:
Windows System State Analyzer

Zum Testen gibt es noch mehr Tools:
Logo Testing Tools (x86)
Logo Testing Tools (x64)
Server Certification Tool (x86) for Self-Testing
Server Certification Tool (x64) for Self-Testing

Auch wenn man selber nicht an dem “Logo”, “Works with” oder “Certified for” Programm teilnehmen will, so ist es doch eine sehr gute Hilfe um seine Applikation/Installer korrekt zu schreiben, dass er bestmoeglichst funktioniert!