J'essaie d'implémenter un graphique en ligne déroulant (similaire aux anciens enregistreurs graphiques) en héritant du contrôle de graphique. Pour ce faire, je dois faire deux choses:Contrôle de diagramme hérité: comment modifier les valeurs et le comportement par défaut
- Modifier les propriétés par défaut des différents objets du contrôle graphique utilise
- série devrait par défaut à la ligne, au lieu de la colonne
- de ChartArea l'axe X a besoin de l'intervalle et le format de l'étiquette a changé
- l'axe Y de ChartArea doit l'intervalle, IsStartedFromZero et format d'étiquette a changé
- changer le comportement de t La méthode AddXY de lui DataPointCollection
- Après un certain temps, il faut supprimer le point de données les plus anciennes pour chaque nouvelle point de données
- Il faut rafraîchir l'axe après chaque point de données est ajouté
Alors que je peux faire tout cela manuellement, je voudrais tout encapsuler dans un contrôle personnalisé. Je veux juste ajouter le contrôle personnalisé avec le concepteur, et avoir toutes ces propriétés déjà définies et le comportement déjà inclus.
En tant que test, j'ai essayé de changer juste la propriété Text du contrôle graphique hérité, sans succès:
Public Class ScrollChart
Inherits Chart
Public Sub New()
Me.Text = "Test"
End Sub
End Class
Et en remplaçant la propriété Text:
Public Class ScrollChart
Inherits Chart
Private _myText As String = "Test"
Public Overrides Property Text() As String
Get
Return _myText
End Get
Set(value As String)
_myText = value
End Set
End Property
End Class
I essayé de changer la série chartType de deux façons différentes:
Public Class ScrollChart
Inherits Chart
Friend WithEvents Chart1 As Chart
Private Sub InitializeComponent()
Dim ChartArea1 As System.Windows.Forms.DataVisualization.Charting.ChartArea = New System.Windows.Forms.DataVisualization.Charting.ChartArea()
Dim Legend1 As System.Windows.Forms.DataVisualization.Charting.Legend = New System.Windows.Forms.DataVisualization.Charting.Legend()
Dim Series1 As ScrollSeries = New ScrollSeries
Me.Chart1 = New System.Windows.Forms.DataVisualization.Charting.Chart()
CType(Me.Chart1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'Chart1
'
ChartArea1.Name = "ChartArea1"
Me.Chart1.ChartAreas.Add(ChartArea1)
Legend1.Name = "Legend1"
Me.Chart1.Legends.Add(Legend1)
Me.Chart1.Location = New System.Drawing.Point(0, 0)
Me.Chart1.Name = "Chart1"
Series1.ChartArea = "ChartArea1"
Series1.Legend = "Legend1"
Series1.Name = "Series1"
Series1.ChartType = SeriesChartType.Line
Me.Chart1.Series.Add(Series1)
Me.Chart1.Size = New System.Drawing.Size(300, 300)
Me.Chart1.TabIndex = 0
Me.Chart1.Text = "Test"
CType(Me.Chart1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
End Class
Public Class ScrollSeries
Inherits Series
Public Sub New()
MyBase.New()
Me.ChartType = SeriesChartType.Line
End Sub
End Class
Dans tous les cas, les propriétés du contrôle que j'ai ajouté en utilisant le concepteur n'ont pas changé. J'ai également essayé d'hériter de DataPointCollection, mais je ne peux pas parce qu'il n'a pas exposé New(), et donc ne peut pas être hérité. Je suppose que j'ai besoin de remplacer les classes Series et DataPointCollection que mon graphique hérité utilise pour changer leurs propriétés et leurs méthodes, mais jusqu'à présent je ne sais pas comment faire.
Les affectations de propriété se produisent après l'exécution de ctor, de sorte que le fait d'essayer de coder en dur "test" comme dans le premier extrait sera écrasé. Pareil pour la seconde. Je ne suis pas sûr de ce que vous faites dans la 3ème. Veuillez lire [ask] et prendre le [tour] – Plutonix
Dans le troisième extrait, j'essayais de faire en sorte que la classe Chart héritée utilise à la place une collection Series héritée.C'était une tentative de remplacer le ChartType par défaut. Je crois que cela n'a pas fonctionné parce que, comme vous l'avez mentionné, il a été remplacé par les deux autres. –
Les deux premiers fonctionnent probablement - le défaut - la valeur de départ initiale est censée être remplacée par n'importe quelle valeur assignée dans le code ou le concepteur. Le dernier bloc ne montre pas que le bloc est appelé, donc cela échouera. S'il vous plaît lire [demander] et prendre le [tour] – Plutonix