Hallo ,
Ich habe mir neulich ein kleines UserControl gemacht, welches die Aufgabe hat ein Tortendiagramm zu zeichnen.
Nun gibt es dort eine Property, die die Aufgabe hat alle Abschnitte des Diagramms in einer Liste zusammen zu fassen:
Wenn ich jetzt die Auflistung (UserControl.Items.Add()) z.B. durch den Designer ändere, zeichnet sich das Control nicht neu. Scheinbar hat das "Me.Invalidate()" im Set-Block keinerlei Auswirkungen, wenn es sich um eine Liste handelt, denn nicht die Liste selbst wird komplett ausgetauscht, sondern nur ihre Auflistung.
Leider stellt das System.Collections.Generic.List(Of T)-Objekt keine Events bereit, die ich nutzen könnte, sofern die Auflistung geändert wurde.
Mehr (einfache) Lösungen fallen mir auf die Schnelle nicht ein.
IDE: Visual Studio Express 2013 (Windows Desktop) auf Windows 7 E. x64
.Net Framework: 4.0
(Falles weitere Informationen gebraucht werden, bitte bescheid geben)
Hier noch der Sourcecode für die Klasse cPieChartItem:
Ich habe bereits im Internet gesucht und keine Lösung gefunden, welche mir geholfen hat. Vielleicht hat jemand von euch hilfreiche Links oder weiß selbst eine Art auf die man die Problematik sauber lösen könnte
Ich bin mir auch bewusst, dass es bereits solche Controls gibt, dennoch bitte ich auf die Fragestellung einzugehen
Ich bedanke mich schon einmal im Voraus, freue mich auf eure Antworten und wünsche allen einen schönen Restsonntag
MfG
Ich habe mir neulich ein kleines UserControl gemacht, welches die Aufgabe hat ein Tortendiagramm zu zeichnen.
Nun gibt es dort eine Property, die die Aufgabe hat alle Abschnitte des Diagramms in einer Liste zusammen zu fassen:
VB.NET-Quellcode
-
- Private mItems As New List(Of cPieChartItem)
- <EditorBrowsable(EditorBrowsableState.Always), Browsable(True), Bindable(True), _
- DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
- Public Property Items As List(Of cPieChartItem) 'Besagte Property
- Get
- Return mItems 'Liste zurückgeben
- End Get
- Set(ByVal Value As List(Of cPieChartItem))
- If mItems IsNot Value Then 'Überprüfen ob nicht die selbe Liste gesetzt wurde, um unnötiges aktualisieren zu verhindern
- mItems = Value 'Neue Liste setzten
- Me.Invalidate() 'Neu zeichnen
- End If
- End Set
- End Property
Wenn ich jetzt die Auflistung (UserControl.Items.Add()) z.B. durch den Designer ändere, zeichnet sich das Control nicht neu. Scheinbar hat das "Me.Invalidate()" im Set-Block keinerlei Auswirkungen, wenn es sich um eine Liste handelt, denn nicht die Liste selbst wird komplett ausgetauscht, sondern nur ihre Auflistung.
Leider stellt das System.Collections.Generic.List(Of T)-Objekt keine Events bereit, die ich nutzen könnte, sofern die Auflistung geändert wurde.
Mehr (einfache) Lösungen fallen mir auf die Schnelle nicht ein.
IDE: Visual Studio Express 2013 (Windows Desktop) auf Windows 7 E. x64
.Net Framework: 4.0
(Falles weitere Informationen gebraucht werden, bitte bescheid geben)
Hier noch der Sourcecode für die Klasse cPieChartItem:
VB.NET-Quellcode
-
- Option Strict On
- Imports System.Drawing
- Public Class cPieChartItem
- Public Property Color As Color = Drawing.Color.Red 'Farbe des Kreissegments
- Public Property Text As String = "cPieChartItem" 'Text/Beschreibung für die Legende
- Public Property Value As Single = 90 'Wert
- Public Sub New(ByVal _Color As Color, ByVal _Text As String, ByVal _Value As Single) 'Sub New
- Color = _Color
- Text = _Text
- Value = _Value
- End Sub
- Public Sub New() 'Sub New für den Designer
- End Sub
- End Class
Ich habe bereits im Internet gesucht und keine Lösung gefunden, welche mir geholfen hat. Vielleicht hat jemand von euch hilfreiche Links oder weiß selbst eine Art auf die man die Problematik sauber lösen könnte
Ich bin mir auch bewusst, dass es bereits solche Controls gibt, dennoch bitte ich auf die Fragestellung einzugehen
Ich bedanke mich schon einmal im Voraus, freue mich auf eure Antworten und wünsche allen einen schönen Restsonntag
MfG