继承的图表控件:如何更改默认值和行为
Inherited Chart control: How to change default values and behaviour
我正在尝试通过继承图表控件来实现滚动折线图(类似于旧图表记录器)。为此,我需要做两件事:
- 更改图表控件使用的各种对象的默认属性
- 系列应该默认为行,而不是列
- ChartArea 的 X 轴需要更改间隔和标签格式
- ChartArea 的 Y 轴需要更改间隔、IsStartedFromZero 和标签格式
- 更改 DataPointCollection 的 AddXY 方法的行为
- 一定时间后,它应该为每个新数据点删除最旧的数据点
- 添加每个数据点后应该刷新轴
虽然我可以手动完成所有这些,但我想将所有内容封装到一个自定义控件中。我只想通过设计器添加自定义控件,并且已经设置了所有这些属性并且已经包含了行为。
作为测试,我尝试只更改继承图表控件的文本 属性,但没有成功:
Public Class ScrollChart
Inherits Chart
Public Sub New()
Me.Text = "Test"
End Sub
End Class
并通过覆盖文本 属性:
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
我尝试以两种不同的方式更改系列图表类型:
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
在每种情况下,我使用设计器添加的控件中的属性都没有改变。我也试过继承DataPointCollection,但是不行,因为没有暴露New(),所以不能继承。
我怀疑我需要替换我继承的 Chart 使用的 Series 和 DataPointCollection 类 以更改它们的属性和方法,但到目前为止我不知道该怎么做。
创建一个用户控件(不继承)并向其添加图表控件,然后您可以在用户控件上创建包装图表控件的属性。例如:
Public Property ChartText() As String
Get
Return Chart1.Text
End Get
Set(value As String)
Chart1.Text = value
End Set
End Property
在控件的构造函数中,您可以指定任何您想要的属性!
在这种情况下,我看不到继承的好处。
我正在尝试通过继承图表控件来实现滚动折线图(类似于旧图表记录器)。为此,我需要做两件事:
- 更改图表控件使用的各种对象的默认属性
- 系列应该默认为行,而不是列
- ChartArea 的 X 轴需要更改间隔和标签格式
- ChartArea 的 Y 轴需要更改间隔、IsStartedFromZero 和标签格式
- 更改 DataPointCollection 的 AddXY 方法的行为
- 一定时间后,它应该为每个新数据点删除最旧的数据点
- 添加每个数据点后应该刷新轴
虽然我可以手动完成所有这些,但我想将所有内容封装到一个自定义控件中。我只想通过设计器添加自定义控件,并且已经设置了所有这些属性并且已经包含了行为。
作为测试,我尝试只更改继承图表控件的文本 属性,但没有成功:
Public Class ScrollChart
Inherits Chart
Public Sub New()
Me.Text = "Test"
End Sub
End Class
并通过覆盖文本 属性:
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
我尝试以两种不同的方式更改系列图表类型:
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
在每种情况下,我使用设计器添加的控件中的属性都没有改变。我也试过继承DataPointCollection,但是不行,因为没有暴露New(),所以不能继承。
我怀疑我需要替换我继承的 Chart 使用的 Series 和 DataPointCollection 类 以更改它们的属性和方法,但到目前为止我不知道该怎么做。
创建一个用户控件(不继承)并向其添加图表控件,然后您可以在用户控件上创建包装图表控件的属性。例如:
Public Property ChartText() As String
Get
Return Chart1.Text
End Get
Set(value As String)
Chart1.Text = value
End Set
End Property
在控件的构造函数中,您可以指定任何您想要的属性!
在这种情况下,我看不到继承的好处。