-
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.
|
Der letzte Eintrag 2005
31.12.05 - Blog-Intern Beitrag von Norbert Eder| | Werter Leser!
An dieser Stelle möchte ich mich bei allen Lesern und Kommentatoren meines Weblogs herzlich für die vergangene Treue bedanken und wünsche auf diesem Wege einen guten Rutsch ins Jahr 2006 und natürlich viel Erfolg.
Auf dass wir uns im nächsten Jahr auch wieder lesen bzw. schreiben ;-)
lG,
Norbert
| | | 1 Kommentar
- 2097 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
Drucken unter C#
30.12.05 - .NET, Base Framework Beitrag von Norbert Eder| | Obwohl es ansich relativ viele Ressourcen im Internet zum Thema 'Drucken unter C#' gibt, wird immer wieder die Frage danach aufgeworfen.
Daher an dieser Stelle ein Codebeispiel:
PrintDocument printDoc = new PrintDocument();
printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);
PrintDialog pd = new PrintDialog();
pd.Document = printDoc;
if (pd.ShowDialog() == DialogResult.OK)
{
printDoc.Print();
}
Was genau passiert hier? Zum Ersten wird ein Dokument angelegt. Dieses stellt quasi die Fläche dar, die ausgedruckt werden soll. Zudem wird ein EventHandler auf das Event PrintPage gelegt um feststellen zu können, wann genau gedruckt wird.
Durch den PrintDialog kann ein Druck-Dialog zur Auswahl des Druckers angezeigt werden.
Durch Aufruf der Methode Print() des PrintDocuments wird der Druck gestartet, wodurch das Event PrintPage ausgelöst wird. Darin muss nun der zu druckende Inhalt in das erhaltene Graphics-Objekt geschrieben werden:
private void printDoc_PrintPage
(object sender, PrintPageEventArgs e)
{
String textToPrint = "Test-Ausdruck";
Font printFont = new Font("Arial", 18, FontStyle.Bold);
e.Graphics.DrawString(textToPrint, printFont, Brushes.Black, 10, 25);
In diesem Fall wird angegebene Text mit in der Schrift Arial, Schriftgröße 18 und fett auf den Koordinaten x = 10 und y = 25 gedruckt.
Es lohnt sich auch, einen Blick auf die PrintPageEventArgs zu werfen.
| | | 2 Kommentare
- 1195 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
AppDomains und Memory-Überwachung
30.12.05 - Base Framework Beitrag von Norbert Eder| | Folgende Konstellation:
- ein Prozess
- mehrere AppDomains
Dies könnte beispielsweise ein Plugin-System sein, in welchem Plugins zur Laufzeit wieder entladen werden können.
Nun macht es doch in manchen Fällen Sinn, eine Überwachung des Speichers einzuführen. Schließlich muss man in bestimmten Umgebungen wissen, wieviel Speicher durch welches Modul verbraucht wird. Und zwar im Echtbetrieb und nicht in einer Testumgebung.
Durch AppDomains können unterschiedliche Module/Anwendungen/etc. wunderbar innerhalb eines Prozesses getrennt werden. Eine Kommunikation durch .NET Remoting ist möglich, jedoch ist jede AppDomain für sich abgeschottet. Das macht auch durchaus so Sinn. Ein Punkt jedoch wurde anscheinend von Microsoft nicht bedacht:
Den Speicherverbrauch kann ich mit .NET Boardmitteln nur für einen Prozess bestimmen - was aber nicht immer ausreicht. Wenn schon mehrere AppDomains in einem Prozess laufen können, dann sollte der Speicherverbrauch auch entsprechend weit heruntergebrochen werden können. Funktioniert aber nicht.
Ausweg? Nun, man sieht sich den Heap-Speicher auf CLR-Ebene an (siehe CLR Profiler). Damit weiß man nun, wieviele Objekte geladen sind, wieviele Referenzen auf ein einzelnes Objekt zeigen und wieviele Speicher sie verbrauchen. Nachteil: Die Daten zu den Objekten liegen allerdings im Stack. Wie an diesen Speicherverbrauch herankommen? Weiß ich noch nicht... muss es aber auch fast eine Lösung geben...
To be continued ...
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Neues Feature
28.12.05 - Blog-Intern Beitrag von Norbert Eder| | Zwar nicht besonders wichtig, aber dennoch möchte ich zumindest darauf hingewiesen haben:
Seit heute gibt es zusätzlich zum Archiv-Kalender auch eine Archivliste, mit der direkt zu Einträgen eines bestimmten Monats navigiert werden kann. Diese ist unter dem Kalender zu finden.
| | | Kommentar hinzufügen
- 10 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
C# - Daten zwischen zwei Formularen austauschen
23.12.05 - .NET, WPF Beitrag von Norbert Eder| | Immer wieder wird die Frage gestellt, wie denn Daten zwischen zwei Formularen ausgetauscht werden können.
Hierfür habe ich kurz ein kleines Testprogramm geschrieben, welches genau dies zeigen soll.
Im Projekt sind zwei Forms zu finden und eine Klasse DataExchange. Diese wird von beiden Formularen verwendet und enthält die entsprechenden Daten.
Aber seht euch doch einfach das Projekt an. Bei Fragen kann ich immer ncoh weiterhelfen ;-)
Download Source DataExchange.zip
Das Projekt wurde unter .NET 1.1 erstellt, sollte aber auch unter 2.0 lauffähig sein ;-)
| | | 2 Kommentare
- 1571 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
C# und Properties
22.12.05 - .NET, Grundlagen, Base Framework Beitrag von Norbert Eder| | Properties sind öffentliche Eigenschaften von Klassen, die private Member kapseln.
Das klingt jetzt kompliziert, ist es aber nicht:
Prinzipiell ist es so, dass einfache Variablen in Klassen immer privat und daher von ausserhalb der Klasse nicht erreichbar sein sollten. In machen Fällen muss aber auf Werte der Klasse (wenn instanziert, dann Objekt) zugegriffen werden. Dies kann auf mehrere Arten passieren:
1. Die Variablen werden mittels public als öffentlich markiert
2. Es werden Properties eingeführt
Variante 1 sollte nicht angewendet werden, also bleibt im Endeffekt nur Variante zwei. Wie sieht das anhand eines Sourcecode-Beispieles aus?
public class Test {
private string name = null;
public string Name {
get { return this.name; }
set { this.name = value; }
}
}
Wie an diesem Beispiel zu sehen, wird in der Variable name ein Wert gespeichert. Zugegriffen kann auf diesen Wert mittelns der Eigenschaft Name werden. Hierzu ist zu beachten, dass Properties (unterschiedlich zu Methoden) kein () nach dem Methodennamen enthalten, also auch keine Parameter übergeben bekommen können. Weiters gibt es die Bereiche get und set. Im get-Bereich wird der in name gespeicherte Wert zurückgegeben. Der set-Bereich dient dazu, den übergebenen Wert in die private Variable zu speichern. Das Schlüsselwort value beinhaltet hierbei den übergebenen Wert. Dies sieht ausserhalb der Klasse so aus:
Test myTest = new Test();
myTest.Name = "mein Name";
Console.WriteLine(myTest.Name)
Consolen-Ausgabe:
mein Name
Nun gut, aber welchen Vorteil hat das ganze nun? Ganz einfach. Durch eine Property kann beispielsweise eine Überprüfung der Werte durchgeführt werden. Zum Beispiel könnte im set-Bereich die Länge des überprüften Wertes abgefragt werden. Überschreitet dieser eine bestimmte Vorgabe, wird der Wert nicht zugewiesen und der alte Wert bleibt erhalten.
Ein Fehler, der oft gemacht wird, ist folgender:
private string name = null;
public string Name {
get { return this.Name; }
set { this.Name = value; }
}
Was genau passiert hier? Sowohl im get-, als auch im set-Bereich wird immer wieder dieselbe Property aufgerufen, was in weiterer Folge zu einem Stack-Überlauf und daher zu einer StackOverflowException führt. Hier ist wirklich darauf zu achten, auch tatsächlich die private Membervariable anzugeben.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
C# Beginner
22.12.05 - Blog-Intern Beitrag von Norbert Eder| | Unter der Rubrik C# Beginner werde ich in Zukunft immer wieder Grundlagen erklären.
Der Hintergrund liegt darin, dass nicht jeder Programmierer als Experte vom Himmel fällt und vor allem in den Anfängen viele Dinge kompliziert erscheinen. In vielen Foren werden grundlegende Fragen gestellt, die von Experten oft nur ungern erklärt werden.
Zusätzlich gibt's noch ein kleines Service:
Mich interessiert, wobei ihr euch schwer tut. Welche Grundlagen würdet ihr gerne einfach vermittelt haben? Wenn hierzu Rückmeldungen von euch kommen, werde ich diese meinen Plänen vorziehen und entsprechende Antworten hier posten. Dies wird natürlich nicht sofort passieren (abhängig von meiner Freizeit), aber doch in einem annehmbaren Zeitrahmen.
Edit 06.01.2007: Bedingt durch eine Umstrukturierung der Kategorien wurde diese Kategorie aufgelassen.
| | | 4 Kommentare
- 1379 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
Deutsches .NET 2.0 Redistributable
20.12.05 - Base Framework Beitrag von Norbert Eder
NDoc für .NET 2.0
20.12.05 - 3rd Party Tools Beitrag von Norbert Eder| | Wer Documentation-Tools für seinen .NET Sourcecode verwendet, wird vermutlich Doxygen oder NDoc verwenden.
Leider ist die Unterstützung für .NET 2.0 noch nicht sehr fortgeschritten bzw. überhaupt nicht verfügbar. Die inoffizielle Version 1.3.1 unterstützt Generics und Sealed Classes (versiegelte Klassen). Das ist ja immerhin schon etwas.
Über diese Information bin ich auf dem Weblog von Albert drübergestolpert.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Emails up and running
20.12.05 - Blog-Intern Beitrag von Norbert Eder Zurück Weiter
|
|
|
|
|
|
|