2

簡潔にするために、マイクロソフトが提供する「WinFormsChartSamples」を確認しました。私が知りたかったのは、Chartcontrols のズームとスクロールを有効にする方法です。そこに示されている例はかなり短いです。

using System.Windows.Forms.DataVisualization.Charting;
...

// Set automatic zooming
chart1.ChartAreas["Default"].AxisX.ScaleView.Zoomable = true;
chart1.ChartAreas["Default"].AxisY.ScaleView.Zoomable = true;

// Set automatic scrolling 
chart1.ChartAreas["Default"].CursorX.AutoScroll = true;
chart1.ChartAreas["Default"].CursorY.AutoScroll = true;

...

私はこれを試しましたが、ズームもスクロールも何も起こりませんでした。私は2つのことを試しました:

  1. Form1.Designer.cs で、その情報をグラフに追加しました。

        chartArea1.Name = "ChartArea1";
        chartArea1.CursorX.AutoScroll = true;
        chartArea1.CursorY.AutoScroll = true;
    
        chartArea1.AxisX.ScaleView.Zoomable = true;
        chartArea1.AxisY.ScaleView.Zoomable = true;
    
        this.chart1.ChartAreas.Add(chartArea1);
        this.chart1.Cursor = System.Windows.Forms.Cursors.Cross;
        legend1.Name = "Legend1";
        this.chart1.Legends.Add(legend1);
        this.chart1.Location = new System.Drawing.Point(297, 62);
        this.chart1.Name = "chart1";
        series1.ChartArea = "ChartArea1";
        series1.Legend = "Legend1";
        series1.Name = "Series1";
        this.chart1.Series.Add(series1);
        this.chart1.Size = new System.Drawing.Size(963, 668);
        this.chart1.TabIndex = 6;
        this.chart1.Text = "chart1";
    
  2. Form1.cs のコンストラクターに直接追加しようとしました。

おそらく、シリーズにデータを追加するために OpenFileDialog を使用していることに言及することが重要です。

private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {

            Stream fileStream = null;
            OpenFileDialog fDialog = new OpenFileDialog();
            fDialog.Title = "Open File..";
            //First the description of the file separated by "|"
            fDialog.Filter = "((ASC files)| *.asc";
            fDialog.InitialDirectory = @"C:\";

            //Show Messagebox if the file was loaded (Source: MSDN - FileDialog.FilterProperty)
            if (fDialog.ShowDialog() == DialogResult.OK)
            {
                MessageBox.Show("The File was loaded successfully.");

                try
                {
                    if ((fileStream = fDialog.OpenFile()) != null)
                    {
                        using (fileStream)
                        {
                            //Insert code for reading the stream here.
                            Spectrum newSpectrum = new Spectrum(chart1.Series.Count, fDialog.FileName,
                               fDialog.SafeFileName, DataHandler.readSpectrumFromFile(fileStream));

                            addSpectrumToView(newSpectrum);

                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

            }
        }

どんなアドバイスでも大歓迎です、事前に感謝します、

BC++

4

4 に答える 4

4

あなたは実際にこれを本当に探していたと思います:

chart1.ChartAreas["Default"].CursorX.IsUserSelectionEnabled = true;
chart1.ChartAreas["Default"].CursorY.IsUserSelectionEnabled = true;

すでに持っているものと組み合わせて使用​​ すると、うまく機能するはずです。これは次のようになります。

// Set automatic zooming
chart1.ChartAreas["Default"].AxisX.ScaleView.Zoomable = true;
chart1.ChartAreas["Default"].AxisY.ScaleView.Zoomable = true;

// Set automatic scrolling 
chart1.ChartAreas["Default"].CursorX.AutoScroll = true;
chart1.ChartAreas["Default"].CursorY.AutoScroll = true;

// Allow user selection for Zoom
chart1.ChartAreas["Default"].CursorX.IsUserSelectionEnabled = true;
chart1.ChartAreas["Default"].CursorY.IsUserSelectionEnabled = true;
于 2013-01-09T20:29:09.770 に答える
2

こちらをご覧ください:http ://archive.msdn.microsoft.com/mschartズーム/スクロールなどを行う例があります。:)

于 2012-06-13T11:44:05.753 に答える
1

簡単にズームできるようにするには、トラックバーを追加してズームに使用します。

    private void trackBar1_Scroll(object sender, EventArgs e)
    {
        chart1.ChartAreas[0].AxisX.ScaleView.Size = trackBar1.Maximum - trackBar1.Value;
        chart1.ChartAreas[1].AxisX.ScaleView.Size = trackBar1.Maximum - trackBar1.Value;
        (etc for however many chart areas you have)
    }

「最大値」は、トラックバーの値が高いほど、表示されるポイントが少なくなるようにするためのものです (拡大ズーム)

デザイナーで、「chart1->ChartAreas->Axes->(いずれかの軸)->scaleview->zoomable」がtrueに設定されていることを確認してください

スクロールバーは通常、データポイントが軸のスケールビューサイズを超えると表示されます。設定されている場合 ('auto' のままだとスクロールは確実に機能しません)、設定されていない場合は設定します。が表示されない場合は、トラックバーを再び使用できます。

    private void trackBar2_ValueChanged(object sender, EventArgs e)
    {
        chart1.ChartAreas[0].AxisX.ScaleView.Position = trackBar2.Value;
        chart1.ChartAreas[1].AxisX.ScaleView.Position = trackBar2.Value;
        (etc for however many chart areas you have)
    }

トラックバーの「最大」を適切な高い数値 (たとえば 5000) に設定し、「値」をロードしたい値に設定してください。

"trackBar_Scroll" と "trackBar_ValueChanged" の違いにまだあまり気づいていませんが、"ValueChanged" はトラックバーがプログラムまたはユーザーのマウス クリックによって移動した場合に機能しますが、"Scoll" はユーザーのマウス クリックによって移動した場合にのみ機能します。

見逃したものはありますか?

于 2012-06-13T15:09:25.373 に答える
1

私のユーザーは、mschart のズームとスクロールの標準的な動作を嫌います。そのため、軸上でドラッグとマウスホイールを使用するマウス ベースのズーム/スクロールを実装しています。

ソースコードはこちら: https://bitbucket.org/controlbreak/mschartfriend

非常にシンプルで短いので、必要に応じてすばやく変更できます。

于 2012-10-18T07:02:29.933 に答える