[英]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.