2017-06-15 4 views
0

私は窓を入れてグラフをプロットし、ズームを追加し、StripLines.outを使用してグラフ領域をリセットし、選択は、以下のようoutputC#を使用してWindowsFormアプリケーションの[リセット]ボタンをクリックした後にStripLinesが機能しないのはなぜですか?

ですだから私は、地域を選択して、X-ズームとY-ズーム用の目盛りを追加することができ、その後リセット]をクリックもう一度領域を選択すると、その機能はうまくいきます。しかし、私はズームから目盛りを外して再び領域を選択します。領域を選択できませんでした。 それはなぜですか?私はこの言語の初心者です。どんな助けもありがとうございます。

これはこれはこれは、リセットボタンのコードでチャート上の選択領域

private void chart1_SelectionRangeChanged(object sender, CursorEventArgs e) 
     {   

      ranges.Add(curRange); 
      selectedIndices.Union(collectDataPoints(chart1.Series[0], curRange.Width, curRange.Height)).Distinct(); 
      StripLine sl = new StripLine(); 
      sl.BackColor = Color.FromArgb(255, Color.Coral); 
      sl.IntervalOffset = Math.Min(curRange.Width, curRange.Height); 
      sl.StripWidth = Math.Abs(curRange.Height - curRange.Width); 
      chart1.ChartAreas[0].AxisX.StripLines.Add(sl); 

     } 
     List<int> collectDataPoints(Series s, double min, double max) 
     { 
      for (int i = 0; i < s.Points.Count; i++) 
       if (s.Points[i].XValue >= min && s.Points[i].XValue <= max) hits.Add(i);   
      return hits; 
     } 
     private void chart1_SelectionRangeChanging(object sender, CursorEventArgs e) 
     { 

      curRange = new SizeF((float)e.NewSelectionStart, (float)e.NewSelectionEnd); 
     } 

ためのコードである私のコードズーム

private void checkBoxXZoom_CheckedChanged(object sender, EventArgs e) 
     { 
      ChartArea CA1 = chart1.ChartAreas[0]; 

      if (this.checkBoxXZoom.Checked == true) 
      { 
       CA1.AxisX.ScaleView.Zoomable = true; 
       CA1.CursorX.AutoScroll = true; 
       CA1.CursorX.IsUserSelectionEnabled = true; 

      } 
      else 
      { 
       CA1.AxisX.ScaleView.Zoomable = false; 
       CA1.CursorX.AutoScroll = false; 
       CA1.CursorX.IsUserSelectionEnabled = false; 
      } 
     } 

     private void checkBoxYZoom_CheckedChanged(object sender, EventArgs e) 
     { 
      ChartArea CA1 = chart1.ChartAreas[0]; 

      if (this.checkBoxYZoom.Checked == true) 
      { 
       CA1.AxisY.ScaleView.Zoomable = true; 
       CA1.CursorY.AutoScroll = true; 
       CA1.CursorY.IsUserSelectionEnabled = true; 
      } 
      else 
      { 
       CA1.AxisY.ScaleView.Zoomable = false; 
       CA1.CursorY.AutoScroll = false; 
       CA1.CursorY.IsUserSelectionEnabled = false; 
      } 
     } 

です。

private void btnReset1_Click(object sender, EventArgs e) 
     { 
       this.chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset(0); 
       this.chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset(0); 
       this.chart1.ChartAreas[0].AxisX.StripLines.Clear(); 
     } 

問題の解決方法を教えてください。

答えて

1

ユーザ選択可能なズームを2つの段階で有効になっている

ChartArea ca = ...; 
ca.CursorX.IsUserEnabled = true; 
ca.CursorX.IsUserSelectionEnabled = true; 

は、マウスを使用してチャートの面積の領域をクリックして、ユーザが選択することを可能にします。ズームは実装されていません。

ca.AxisX.ScaleView.Zoomable = true; 

ScaleView設定としてCursorユーザ選択を適用することによって、インタラクティブズームを可能にします。

だからあなたの場合には、あなたのチェックボックスにのみでもオフに変倍で可能カーソルの範囲選択を続けるであろう、そのようZoomableプロパティを切り替える必要があります。

private void checkBoxXZoom_CheckedChanged(object sender, EventArgs e) 
{ 
    ChartArea ca = ...; 
    ca.AxisX.ScaleView.Zoomable = this.checkBoxXZoom.Checked; 
} 
+0

非常にmuch.Iあなたの助けのための初心者をありがとうあなたがこれをさらに明確にすることができるならば、この言語のために。 – SNP

+0

さん、私の問題は、最初にxまたはyのチェックボックスだけがtrueになっているエリアを選択できることです。リセットボタンをクリックしてチェックボックスをfalseにした後、エリアを選択できません。なぜthat.pleaseは私に解決策を与えますか? 。 – SNP

+0

コンストラクタのカーソル設定を設定します。チェックボックスのイベントハンドラでズーム可能なプロパティのみを切り替えます。 – zeFrenchy

関連する問題