Feed
Contact
XING
LinkedIn
Twitter
ICQ
meebo.com

C# Merkzettel

by Roland Schumacher alias GENiALi 16. April 2010 -- 672 Wörter  -- 536 mal gelesen
Dieser Beitrag ist mir was wert:  

Sachen die immer mal wieder nützlich sein können.

1. Kalenderwoche eines Datum ermitteln.
private int KW(DateTime datum)
{
    CultureInfo cultureInfo = CultureInfo.CurrentCulture;
    int kw = cultureInfo.Calendar.GetWeekOfYear(datum, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
    return kw;
}
2. Ein einfaches Event erstellen.
public event EventHandler<EventArgs> DeletePersonEvent;
public void DeletePerson()
{
	if(DeletePersonEvent != null)
	{
		DeletePersonEvent(this, new EventArgs());
	}
}
3. WPF Zeilenumbruch in einer Caption oder Text Tag.
<TextBox x:Name="myTextBox" Text="Linie 1 &#x0a; Linie 2" />

Zeilenumbruch mit: &#x0a;

4. DataTable über WCF

Das geht nicht. Man darf es zuerst noch in ein DataSet verpacken und dann über WCF übertragen.

public DataSet GetPersonenDataSet()
{
    DataSet ds = new DataSet();
    ds.Tables.Add(m_PersonDao.Read());

    return ds;
}

m_PersonDao.Read() gibt ein DataTable zurück.

5. WPF Datenbindung

Auch immer mal wieder etwas was ich suche, obwohl es eigentlich sehr einfach ist.

Wahrscheinlich gibt es etwa 1000 Möglichkeiten wie man es lösen kann. Ich mache es zur Zeit so.

Code-Behind vom XAML:

public RaumView(RaumModel model)
{
    InitializeComponent();

    this.m_Model = model;

    this.DataContext = m_Model;
}

In Zeile 7 binde ich eine Klasse, die meine Objekte enthält, an den DataContext.

Danach kann ich auf den Controls relativ einfach die Daten binden.

Text="{Binding Raum.Standort.Bezeichnung, Mode=OneWay}"

In diesem Text wird eigentlich m_Model.Raum.Standort.Bezeichnung angezeigt. Das Feld wird aber nicht zurück in den DataContext synchronisiert (Mode=OneWay). Wenn das der fall sein soll, dann macht man das so.

Text="{Binding Raum.Bezeichnung, Mode=TwoWay}"

Die Bezeichnung des Raumes wird jetzt in den DataContext zurück synchronisiert (Mode=”TwoWay”).

So in etwa reicht es für mich zur Zeit aus.

6. GUID im Debugger ändern

Hat man mal das Bedürfnis eine Variable zur Laufzeit zu ändern, die vom Typ GUID ist, kann man nicht einfach die neue GUID im Debugger reinschreiben.

So sieht es zur Laufzeit aus.

Original GUID

Einfach neue GUID zwischen die {} kopieren resultiert in einem Fehler.

Fehler

Lösung:

Richtig gemacht

new Guid(“<GUID>”)

So sieht es danach aus.

neue GUID

7. Irgend eine Datei öffnen

Ich will eine Datei öffnen ohne das ich das Programm kennen muss was für die Datei nötig ist. Das geht natürlich nur wenn ein Haendler für die Datei auf dem System registriert ist. Und wenn, dann ist es einfach.

Process myProcess = new Process();
myProcess.StartInfo.FileName = "<PFAD_ZUR_DATEI>";
myProcess.StartInfo.UseShellExecute = true;
myProcess.StartInfo.RedirectStandardOutput = false;
myProcess.Start();

Der FileName muss ein kompletter Pfad zu seiner Datei sein. z.B.: “c:\temp\MeinProgi\MeineDatei.txt

8. Eine E-Mail mit dem Standard E-Mail Programm öffnen.

Auch das kann mit der Process Klasse gemacht werden.

Process myProcess = new Process();
myProcess.StartInfo.FileName = string.Format("mailto:{0}", mailto);
myProcess.StartInfo.UseShellExecute = true;
myProcess.StartInfo.RedirectStandardOutput = false;
myProcess.Start();

Und schon öffnet sich eine E-Mail mit seinem Standard E-Mail Programm. Aber das geht nur wenn auf dem System ein mailto Haendler registriert ist. Aber sobald ein E-Mail Klient installiert ist ist das der Fall. Wenn kein mailto Haendler vorhanden ist kann eigenartiges Passieren. Bei uns auf einem Windows XP startete danach ein paar 100 Mal der Internet Explorer. Wie so er so oft startete ist mir nicht klar. Aber danach gab es eine Klickorgie bis alle IE’s geschlossen waren.

Der mailto Haendler ist unter HKEY_CLASSES_ROOT\mailto zu finden. Das heisst, es muss auch etwas in der Form HKEY_CLASSES_ROOT\mailto\shell\open\command mit einem Eintrag vorhanden sein.

So kann auch eine URL mit dem Standardbrowser geöffnet werden. Dann gibt man bei FileName nur die URL an. http://…

9. WCF Klassen und ihre Konstruktoren

Ich wollte bei der Initialisierung einer neuen Klasse einen Wert erzwingen. Der soll immer gesetzt werden. Dazu habe ich einfach den Konstruktor überladen, dass heisst, keinen leeren mehr angeboten.

Danach wollte der Host nicht mehr starten. Aber die Fehlermeldung gab keinen Hinweis darauf. Auch war in den Tracelogs vom WCF kein Hinweis zu finden. Per Zufall habe ich dann einen Haltepunkt geschickt gesetzt und dort den Hinweis bekommen das die Klasse Serie nicht serialisiert werden kann. Da machte es klick.

Man merke sich. Klassen die über WCF übertragen werden sollen MÜSSEN einen default Konstruktor haben ohne Überladung.

10. WPF Dantenbindung zwischen Controls Eigenschaften

Na ja, ob hier der Titel passt?! Schauen wir mal.

Ich komme immer mal wieder an die Situation das ich Controls einschalten oder ausschalten soll, und das anhand eines anderen Controls. Z.B. Wenn RadioButton IsChecked=true ist, dann bist du eingeblendet. Das geht mit WPF auch erstaunlich einfach.

IsEnabled="{Binding ElementName=optMamUnten, Path=IsChecked}"

Binding ElementName gibt an welches Control man nutzen will. Mit Path wird dann noch gesagt auf welches Property man achten will. Sobald das RadioButton mit dem Namen optMamUnten IsChecked=true ist wird das Control eingeschaltet. So einfach kann es sein.

Gibt dann einen ganz schönen und einfach umzusetzenden Effekt.

Checked 1

Checked 2

kick it on dotnet-kicks.de

Tags: , , , , , , , ,

Entwicklung

ReSharper – Farbeinstellung “Highlight current line”

by Roland Schumacher alias GENiALi 5. December 2009 -- 215 Wörter  -- 187 mal gelesen
Dieser Beitrag ist mir was wert:  

Ich experimentiere wieder einmal mit Tools für Visual Studio rum. Vor kurzem viel mir die CodeRush Xpress Version in die Finger. Ist gratis und bietet, wie sollte es anders sein, ein paar Funktionen der grossen Version an.

Vor Jahren, mit Visual Studio 2003, nutzte ich einige Zeit lang ReSharper. Also wollte ich die aktuelle Version auch noch testen.

Ich lud mir beide Versionen runter und installierte sie als Trial. Die Vollversion von CodeRush schmiss ich aber gleich wieder runter. Es war mir einfach zu bunt in der IDE. Viel zu bunt. Also installiert ich dann noch ReSharper 4.5. Macht schon ein viel besserer Eindruck.

Etwas, was mir bei ReSharper ganz schnell gut gefällt ist das Hervorheben der aktuellen Zeile. Aber, mit Black Visual Studio sieht die Originaleinstellung nur blöde aus.

Current Line in Black Visual Studio

Bei den Settings zum ReSharper kann aber nur das “Highlight current line” eingeschaltet werden. Aber die Farbgebung kann dort nicht eingestellt werden.

ReSharper Settings

Nach kurzem suchen im Internet fand ich dann aber schnell die Lösung. Die Einstellung ist in den Optionen von Visual Studio zu finden. Bei “Umgebung –> Schriftarten und Farben”. Das Element heisst ReSharper Current Line.

Visual Studio Settings

Wenn dann hier was Sinnvolles eingestellt wird sieht es auch in der IDE wieder gut aus.

Highlight current line - Sieht gut aus.

Mal schauen was mir das Tool ReSharper sonst noch zu bieten hat.

kick it on dotnet-kicks.de

Tags: , , ,

Entwicklung

C# – 64Bit oder 32Bit OS?

by Roland Schumacher alias GENiALi 23. September 2009 -- 174 Wörter  -- 432 mal gelesen
Dieser Beitrag ist mir was wert:  

Wenn das bestimmt werden soll wird es schwierig. Ich musste einem Problem nachgehen das auftaucht wenn man mit der VSTO unter Excel in einem 64Bit OS arbeitet. Gewisse Operationen verursachen folgende Fehlermeldung:

Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))

Abhilfe schafft der Artikel KB320369. Der Fehler wird offensichtlich auf einen Fehler in der VSTO zurück geführt.

Ich wollte den Hack aber nicht auch unter 32Bit OS anwenden. Aber dafür muss ich irgend wie bestimmen ob der Code unter einem 64Bit oder 32Bit OS ausgeführt wird. Das .NET Framework scheint da keine Methode anzubieten um das einfach zu lösen. Im Internet sind  einige kuriose Lösungen für das Problem zu finden.

Ich habe jetzt folgende umgesetzt die unter Vista 64Bit und Windows 7 32Bit funktioniert.

//Nicht vergessen
using System.Runtime.InteropServices;


[DllImport("kernel32.dll")]
private static extern uint GetSystemWow64Directory(StringBuilder lpBuffer, uint uSize);
internal static byte GetOSBitness()
{
    StringBuilder lpBuffer = new StringBuilder(260);
    uint uSize = GetSystemWow64Directory(lpBuffer, 260);
    if (uSize > 0) return 1; //64-bit
    return 0; //32-bit
}

Gefunden –> HOWTO: Detect Process Bitness

Diese Lösung funktioniert aber nur ab Windows XP (MSDN).

kick it on dotnet-kicks.de

Tags: , , , ,

Entwicklung

Cooles Tool – SQL Dumper

by Roland Schumacher alias GENiALi 19. March 2009 -- 195 Wörter  -- 136 mal gelesen
Dieser Beitrag ist mir was wert:  

Wer kennt das nicht. Man erstellt in einem aktuellen Projekt einen neu Tabelle und füllt diese wärend der Entwicklung mit Daten. Diese sind auch sinnvoll und könnten so ins Livesystem übernommen werden.

Aber wie bekommt man die ohne grosse mühen ins Livesystem?

Bei uns kursierte bis vor kurzem eine Transact SQL wo man die Tabelle angeben konnte. Danach wurde einem noch ein Transact SQL generiert wo man noch die WHERE Klausel anpassen musste. Danach hatte man eine menge Insert’s die aber bei gewissen Spaltennamen nicht funktionierten. Das war einfach nur …

Auf der Suche nach einem Tool fand ich dann den SQL Dumper von Ruizata Project.

Absolut genial. Man gibt den Server an, die Datenbank und wählt dann aus was man exportieren will.

 SQL Dumper Dialog

Generiert wird einem etwas in folgender Form (Beispiele sind von der Webseite des Projekts).

INSERT INTO dbo.TABLE VALUES( 98, 'Pedro Rubina')
INSERT INTO dbo.TABLE VALUES( 96, 'John Riley')
INSERT INTO dbo.TABLE VALUES( 27, 'Sandra Moutinho')

Oder:

SET IDENTITY_INSERT dbo.TABLE ON

INSERT INTO dbo.TABLE(code, name) VALUES( 98, 'Pedro Rubina')
INSERT INTO dbo.TABLE(code, name) VALUES( 96, 'John Riley')
INSERT INTO dbo.TABLE(code, name) VALUES( 27, 'Sandra Moutinho')

SET IDENTITY_INSERT dbo.TABLE OFF

Ach ja. Kosten tut das Tool nichts. :-)

Tags: , ,

Allerlei | Entwicklung

Visual Studio 6.0 – Kein Mausrad zum scrollen

by Roland Schumacher alias GENiALi 10. November 2008 -- 109 Wörter  -- 63 mal gelesen
Dieser Beitrag ist mir was wert:  

Ich darf wieder einmal mit Visual Studio 6.0 arbeiten. Da öffnet man eine Codedatei und ärgert sich schon das erste mal gewaltig. :-)

Wieso? Weil beim scrollen mit dem Mausrad einfach nichts passiert. Das ist doch nicht mehr Zeitgemäss, so wie die IDE auch. :-)

OK. Die Abhilfe. Man such bei Google nach “Visual Studio 6 Mausrad”. Der erste Eintrag bei mir geht zu Peter Bucher. Dort gibt es dann einen weiteren Link zu Microsoft (Mausrad nicht aktiviert in der Visual Basic 6.0-Entwicklungsumgebung).

3 Minuten später tut das Mausrad auch im Visual Studio 6 und ich freue mich über das bisschen mehr an Komfort.

Tags: ,

Allerlei | Software

Übersetzen

Diverses

Seitwert

Locations of visitors to this page

Rating
Excellent - 97%overlay Icon

Statistik