2017-08-08 2 views
0

私はチャートコントロールから継承してスクロールラインチャート(古いチャートレコーダーに似ています)を実装しようとしています。 Chartコントロールが 継承されたチャートコントロール:デフォルト値とビヘイビアーを変更する方法

  • シリーズのChartAreaのX軸は間隔を必要とする代わりに、列
  • の、ラインをデフォルトとすべきである使用されるさまざまなオブジェクトの

    1. 変更デフォルトプロパティ:これを行うには、私は2つのことを行う必要がありますラベルフォーマットは
    2. のChartAreaのY軸は間隔、IsStartedFromZeroを必要とする変更、およびラベルフォーマットは
  • 変更トンの振る舞いを変更しました彼DataPointCollectionのAddXY方法
    • 一定時間が経過した後、それは私がすることができますが、すべてのデータポイントが
  • を追加した後、それは軸をリフレッシュする必要があり、すべての新しいデータポイント

  • ための最も古いデータポイントを削除する必要がありますこれをすべて手作業で行い、すべてを1つのカスタムコントロールにカプセル化したいと思います。デザイナーでカスタムコントロールを追加して、これらのプロパティをすべて設定し、ビヘイビアが既に含まれているようにします。試験として

    、私は成功せず、単に継承されたチャートコントロールのTextプロパティを変更しようとしました:

    Public Class ScrollChart 
        Inherits Chart 
    
        Public Sub New() 
         Me.Text = "Test" 
        End Sub 
    End Class 
    

    、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 
    

    私はSeriesチャートタイプを2つの異なる方法で変更しようとしました:

    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クラスを置き換える必要があると思われますが、これまでのところ私はその方法を犠牲にしています。

  • +0

    ctorの実行後にプロパティの割り当てが行われるため、最初のスニペットのようにハードコード "test"を上書きしようとすると上書きされます。 2番目のものと同じです。私は3日に何をしているのか分かりません。 [ask]を読んで[ツアー]を受けてください – Plutonix

    +0

    3番目のスニペットでは、継承したChartクラスに継承されたSeriesコレクションを代わりに使用しようとしていました。これはデフォルトのChartTypeをオーバーライドしようとする試みでした。あなたが言及したように、それは他の2人と同じように上書きされたので、それはうまくいきませんでした。 –

    +0

    最初の2つはおそらく動作しています - デフォルト - 最初の開始値は、コードまたはデザイナーで割り当てられた値で置き換えられるはずです。最後のブロックはブロックが呼び出されていることを示していないので、失敗します。 [質問]を読んで[ツアー]を受けてください – Plutonix

    答えて

    2

    (継承なしで)ユーザーコントロールを作成し、そのコントロールにグラフコントロールを追加すると、グラフコントロールをラップするユーザーコントロールにプロパティを作成できます。例:

    Public Property ChartText() As String 
        Get 
         Return Chart1.Text 
        End Get 
        Set(value As String) 
         Chart1.Text = value 
        End Set 
    End Property 
    

    コントロールのctorでは、任意のプロパティを割り当てることができます。

    この場合、継承のメリットはありません。

    関連する問題