[英]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;
...
我試過了,沒有任何反應,沒有縮放,也沒有滾動。 我嘗試了兩件事:
在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";
我試圖將其直接添加到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.