Hallo Community.
In diesem Artikel erkläre ich, wie man ein Trackercontrol (bekannt aus z.B. dem Taskmanager) erstellt, und erkläre dabei auch allgemein die Vorgehensweise, die man bei so etwas verwenden sollte.
Ich habe das Control ursprünglich in C# erstellt, weswegen ich immer beide Codes posten werde. Allerdings braucht ihr euch keine Sorgen zu machen, ich habe alles per Hand übersetzt, weshalb der VB-Code qualitativ genauso hochwertig ist.
Aber nun zum Eigentlichen. Bevor wir mit dem Programmieren anfangen können, sollten wir uns zunächst überlegen, was unser Control alles können soll. Ich verwende dazu sehr gerne ein Klassendiagramm, dieses bekommt ihr mit "Rechtstklick auf euer Projekt im Projektmappenexplorer -> Klassendiagramm anzeigen".
Das Trackercontrol soll mehrere Pfade besitzen können (also mehrere Graphen-Linien), also liegt es nahe, daraus eine extra Klasse zu machen. Dort können wird dann alle Eigenschaft gut unterbringen. In meinem Fall möchte ich, dass ein Pfad seine, Farbe, seine Linienbreite, seine Füllfarbe, ob er überhaupt gefüllt ist, den maximalen Wert, einen Namen, und natürlich die später angezeigten Werte speichert. Das Klassendiagramm für die Pfad-Klasse sieht dann so aus:
Die restlichen Eigenschaften und Methoden, die ihr seht, kommen von den implementierten Interfaces, zu denen ich nun auch etwas sagen werden.
Bei einem Pfad handelt es sich um eine Liste von Werten, die nachher im Tracker angezeigt werden, aus diesen wird das Diagramm zusammengesetzt. Also liegt es nahe, dass unsere Klasse IEnumerable und ICollection implementiert. Ich habe mich dafür entschieden, dass die Werte als Integer gespeichert werden sollen, deswegen IEnumerable(Of Integer). Ihr könnt natürlich auch einen anderen Datentypen wie Single oder Double wählen.
Auch INotifyPropertyChanged habe ich implementiert, denn wir wollen das Tracker-Control später ja auch darüber informieren, wenn sich eine Eigenschaft geändert hat und neugezeichnet werden muss. Mehr dazu gibts dann gleich beim Code.
Zur Architektur kann ich sagen, ich habe absichtlich nicht einfach IList(Of Integer) implementiert, da diese auch Methoden wie Add und Remove besitzt. Diese möchte ich aber nicht, denn man soll immer nur ganz hinten einen neuen Wert hinzufügen können, und man soll keine Werte entfernen können. Außerdem habe ich noch eine Eigenschaft "MaxStoredValues" angelegt, die angibt, wie viele Werte der Pfad speichern soll. Wird die Anzahl überschritten, so soll die Klasse die überflüssigen Werte löschen. Dadurch verhindere ich, dass irgendwann ein paar Millionen Werte gespeichert sind, die man sowieso nicht sehen kann.
In diesem Artikel erkläre ich, wie man ein Trackercontrol (bekannt aus z.B. dem Taskmanager) erstellt, und erkläre dabei auch allgemein die Vorgehensweise, die man bei so etwas verwenden sollte.
Ich habe das Control ursprünglich in C# erstellt, weswegen ich immer beide Codes posten werde. Allerdings braucht ihr euch keine Sorgen zu machen, ich habe alles per Hand übersetzt, weshalb der VB-Code qualitativ genauso hochwertig ist.
Aber nun zum Eigentlichen. Bevor wir mit dem Programmieren anfangen können, sollten wir uns zunächst überlegen, was unser Control alles können soll. Ich verwende dazu sehr gerne ein Klassendiagramm, dieses bekommt ihr mit "Rechtstklick auf euer Projekt im Projektmappenexplorer -> Klassendiagramm anzeigen".
Das Trackercontrol soll mehrere Pfade besitzen können (also mehrere Graphen-Linien), also liegt es nahe, daraus eine extra Klasse zu machen. Dort können wird dann alle Eigenschaft gut unterbringen. In meinem Fall möchte ich, dass ein Pfad seine, Farbe, seine Linienbreite, seine Füllfarbe, ob er überhaupt gefüllt ist, den maximalen Wert, einen Namen, und natürlich die später angezeigten Werte speichert. Das Klassendiagramm für die Pfad-Klasse sieht dann so aus:
Die restlichen Eigenschaften und Methoden, die ihr seht, kommen von den implementierten Interfaces, zu denen ich nun auch etwas sagen werden.
Bei einem Pfad handelt es sich um eine Liste von Werten, die nachher im Tracker angezeigt werden, aus diesen wird das Diagramm zusammengesetzt. Also liegt es nahe, dass unsere Klasse IEnumerable und ICollection implementiert. Ich habe mich dafür entschieden, dass die Werte als Integer gespeichert werden sollen, deswegen IEnumerable(Of Integer). Ihr könnt natürlich auch einen anderen Datentypen wie Single oder Double wählen.
Auch INotifyPropertyChanged habe ich implementiert, denn wir wollen das Tracker-Control später ja auch darüber informieren, wenn sich eine Eigenschaft geändert hat und neugezeichnet werden muss. Mehr dazu gibts dann gleich beim Code.
Zur Architektur kann ich sagen, ich habe absichtlich nicht einfach IList(Of Integer) implementiert, da diese auch Methoden wie Add und Remove besitzt. Diese möchte ich aber nicht, denn man soll immer nur ganz hinten einen neuen Wert hinzufügen können, und man soll keine Werte entfernen können. Außerdem habe ich noch eine Eigenschaft "MaxStoredValues" angelegt, die angibt, wie viele Werte der Pfad speichern soll. Wird die Anzahl überschritten, so soll die Klasse die überflüssigen Werte löschen. Dadurch verhindere ich, dass irgendwann ein paar Millionen Werte gespeichert sind, die man sowieso nicht sehen kann.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Artentus“ ()