簡體   English   中英

為什么自動縮放/滾動不適用於我的圖表?

[英]Why does auto Zoom/Scroll not work for my Chart?

為了簡短起見,我檢查了Microsoft提供的“ 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;

...

我試過了,沒有任何反應,沒有縮放,也沒有滾動。 我嘗試了兩件事:

  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 ++

我認為您實際上是在尋找這個:

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;

在這里看看: http : //archive.msdn.microsoft.com/mschart那里有一個示例,它可以進行縮放/滾動等等! :)

要啟用輕松縮放,請添加一個軌跡欄並將其用於縮放:

    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

如果已設置數據點,則滾動條通常會出現在數據點超過軸的比例視圖大小的情況下(如果設置為“自動”,則滾動不會真正可靠地工作);如果未設置,則進行設置;如果滾動條沒有出現,可以再次使用跟蹤欄:

    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”僅在通過用戶單擊鼠標移動時有效。

我錯過了什么?

我的用戶不喜歡mschart縮放和滾動的標准行為。 這就是為什么我實現基於鼠標的縮放/滾動,並在軸上使用拖動和鼠標滾輪的原因

源代碼在這里:https://bitbucket.org/controlbreak/mschartfriend

它非常簡單且簡短,您可以根據需要快速更改它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM