C# 如何以另一种形式(如overview)显示两个表单中的两个图表
我正在实施图表控件。。。。 我有三张表格,一张表格二张表格三 在表格1中,我以饼图的形式显示了一些数据 表格2我以条形图的形式展示了一些数据。。这很好 我的问题是我想在表3中显示这两个图表,就像在视图中一样。。。用户将在其中看到所有图表 因此,当我点击按钮时,表格3将与两个图表并排打开(一个是表格1中的饼图,另一个是表格2中的条形图),如果你点击表格3中的一个图表,它将进入相应的表格..像这样 有没有人知道如何实施C# 如何以另一种形式(如overview)显示两个表单中的两个图表,c#,.net,winforms,charts,C#,.net,Winforms,Charts,我正在实施图表控件。。。。 我有三张表格,一张表格二张表格三 在表格1中,我以饼图的形式显示了一些数据 表格2我以条形图的形式展示了一些数据。。这很好 我的问题是我想在表3中显示这两个图表,就像在视图中一样。。。用户将在其中看到所有图表 因此,当我点击按钮时,表格3将与两个图表并排打开(一个是表格1中的饼图,另一个是表格2中的条形图),如果你点击表格3中的一个图表,它将进入相应的表格..像这样 有没有人知道如何实施 事先非常感谢……我可以想出几种方法来做这件事 1) 让您的图表连接到其数据的数据
事先非常感谢……我可以想出几种方法来做这件事 1) 让您的图表连接到其数据的数据源。表1中的图表和表3中的图表1连接到数据源1。表格2中的图表和表格3中的图表2连接到另一个数据源。图表将显示相同的数据,因此它们的外观将是相同的。这与许多标准控件类似。但是,如果用户可以与您的图表进行交互,则您需要为表格3中的图表阻止该交互(具有只读属性),并将表格1和表格2中的图表中的所有事件复制到表格3中的图表
2) 将方法添加到表单1和2(或图表1和2)以获取其当前显示为图像。表单3包含两个显示这些图像的PictureBox控件。如果存在任何交互,您可以定期在计时器事件上获取图像。您的图表控件可能会有一个可以快速检索的图像缓存副本。我可以想出几种方法 1) 让您的图表连接到其数据的数据源。表1中的图表和表3中的图表1连接到数据源1。表格2中的图表和表格3中的图表2连接到另一个数据源。图表将显示相同的数据,因此它们的外观将是相同的。这与许多标准控件类似。但是,如果用户可以与您的图表进行交互,则您需要为表格3中的图表阻止该交互(具有只读属性),并将表格1和表格2中的图表中的所有事件复制到表格3中的图表
2) 将方法添加到表单1和2(或图表1和2)以获取其当前显示为图像。表单3包含两个显示这些图像的PictureBox控件。如果存在任何交互,您可以定期在计时器事件上获取图像。您的图表控件可能会有一个可以快速检索的图像缓存副本。我会这样做: 1) 创建两个包含mschart的用户控件,并调用它们,例如
PieChartControl
和BarChartControl
。公开设置当前数据源的方法(例如,SetDataSource(DataTable dt)
),并将数据源绑定到饼图或条形图的逻辑放在那里
2) 创建3个表单:在Form1
addPieChartControl
、在Form2
addBarChartControl
和Form3
中添加SplitContainer
,您将在其中添加PieChartControl
和BarChartControl
3) ExposeSetDataSource()
方法也在Form1
和Form2
中(它将只调用相应的内部控制方法)
4) 还公开Form3
中的SetDataSource()
方法;它将调用内部PieChartControl
和BarChartControl
的SetDataSource()
方法
5) Form3
还必须公开一个自定义属性(例如,ChartClicked
),指示已单击的图表
6) 在表格3中,订阅PieChartControl
和BarChartControl
7) 当触发Click
事件时,只需设置ChartClicked属性并关闭表单
下面是一些代码示例,帮助您理解我的解释 助手枚举:
public enum ChartClicked { None = 0, Pie = 1, Bar = 2 }
// this is the form that have the button to open Form3
public partial class MainForm: Form
{
// other methods ...
private void openForm3ButtonClick(object sender,Eventargs e)
{
Form3 f3 = new Form3();
f3.SetDataSource(this.dataSrc)
f3.ShowDialog();
if(f3.ChartClicked == ChartClicked .Pie)
{
Form1 f1 = new Form1();
f1.SetDataSource(this.dataSrc);
f1.ShowDialog();
}
else if(f3.ChartClicked == ChartClicked .Bar)
{
Form2 f2 = new Form2();
f2.SetDataSource(this.dataSrc);
f2.ShowDialog();
}
}
}
// the form having the 2 controls
public partial class Form3: Form
{
// other methods ...
public ChartClicked ChartClicked { get; private set; }
public Form3()
{
this.InitializeComponents();
this.PieChartControl.Click += chartControlClicked;
this.BarChartControl.Click += chartControlClicked;
}
public void SetDataSource(object src)
{
this.PieChartControl.SetDataSource(src);
this.BarChartControl.SetDataSource(src);
}
private void chartControlClicked(object sender, EventArgs e)
{
if(sender == this.PieChartControl)
this.ChartClicked = ChartClicked .Pie;
else if(sender == this.BarChartControl)
this.ChartClicked = ChartClicked .Bar;
this.Close();
}
}
// the form having the pie chart control
public partial class Form1: Form
{
// other methods ...
public void SetDataSource(object src)
{
this.PieChartControl.SetDataSource(src);
}
}
MainForm:
public enum ChartClicked { None = 0, Pie = 1, Bar = 2 }
// this is the form that have the button to open Form3
public partial class MainForm: Form
{
// other methods ...
private void openForm3ButtonClick(object sender,Eventargs e)
{
Form3 f3 = new Form3();
f3.SetDataSource(this.dataSrc)
f3.ShowDialog();
if(f3.ChartClicked == ChartClicked .Pie)
{
Form1 f1 = new Form1();
f1.SetDataSource(this.dataSrc);
f1.ShowDialog();
}
else if(f3.ChartClicked == ChartClicked .Bar)
{
Form2 f2 = new Form2();
f2.SetDataSource(this.dataSrc);
f2.ShowDialog();
}
}
}
// the form having the 2 controls
public partial class Form3: Form
{
// other methods ...
public ChartClicked ChartClicked { get; private set; }
public Form3()
{
this.InitializeComponents();
this.PieChartControl.Click += chartControlClicked;
this.BarChartControl.Click += chartControlClicked;
}
public void SetDataSource(object src)
{
this.PieChartControl.SetDataSource(src);
this.BarChartControl.SetDataSource(src);
}
private void chartControlClicked(object sender, EventArgs e)
{
if(sender == this.PieChartControl)
this.ChartClicked = ChartClicked .Pie;
else if(sender == this.BarChartControl)
this.ChartClicked = ChartClicked .Bar;
this.Close();
}
}
// the form having the pie chart control
public partial class Form1: Form
{
// other methods ...
public void SetDataSource(object src)
{
this.PieChartControl.SetDataSource(src);
}
}
表格3:
public enum ChartClicked { None = 0, Pie = 1, Bar = 2 }
// this is the form that have the button to open Form3
public partial class MainForm: Form
{
// other methods ...
private void openForm3ButtonClick(object sender,Eventargs e)
{
Form3 f3 = new Form3();
f3.SetDataSource(this.dataSrc)
f3.ShowDialog();
if(f3.ChartClicked == ChartClicked .Pie)
{
Form1 f1 = new Form1();
f1.SetDataSource(this.dataSrc);
f1.ShowDialog();
}
else if(f3.ChartClicked == ChartClicked .Bar)
{
Form2 f2 = new Form2();
f2.SetDataSource(this.dataSrc);
f2.ShowDialog();
}
}
}
// the form having the 2 controls
public partial class Form3: Form
{
// other methods ...
public ChartClicked ChartClicked { get; private set; }
public Form3()
{
this.InitializeComponents();
this.PieChartControl.Click += chartControlClicked;
this.BarChartControl.Click += chartControlClicked;
}
public void SetDataSource(object src)
{
this.PieChartControl.SetDataSource(src);
this.BarChartControl.SetDataSource(src);
}
private void chartControlClicked(object sender, EventArgs e)
{
if(sender == this.PieChartControl)
this.ChartClicked = ChartClicked .Pie;
else if(sender == this.BarChartControl)
this.ChartClicked = ChartClicked .Bar;
this.Close();
}
}
// the form having the pie chart control
public partial class Form1: Form
{
// other methods ...
public void SetDataSource(object src)
{
this.PieChartControl.SetDataSource(src);
}
}
表格1:
public enum ChartClicked { None = 0, Pie = 1, Bar = 2 }
// this is the form that have the button to open Form3
public partial class MainForm: Form
{
// other methods ...
private void openForm3ButtonClick(object sender,Eventargs e)
{
Form3 f3 = new Form3();
f3.SetDataSource(this.dataSrc)
f3.ShowDialog();
if(f3.ChartClicked == ChartClicked .Pie)
{
Form1 f1 = new Form1();
f1.SetDataSource(this.dataSrc);
f1.ShowDialog();
}
else if(f3.ChartClicked == ChartClicked .Bar)
{
Form2 f2 = new Form2();
f2.SetDataSource(this.dataSrc);
f2.ShowDialog();
}
}
}
// the form having the 2 controls
public partial class Form3: Form
{
// other methods ...
public ChartClicked ChartClicked { get; private set; }
public Form3()
{
this.InitializeComponents();
this.PieChartControl.Click += chartControlClicked;
this.BarChartControl.Click += chartControlClicked;
}
public void SetDataSource(object src)
{
this.PieChartControl.SetDataSource(src);
this.BarChartControl.SetDataSource(src);
}
private void chartControlClicked(object sender, EventArgs e)
{
if(sender == this.PieChartControl)
this.ChartClicked = ChartClicked .Pie;
else if(sender == this.BarChartControl)
this.ChartClicked = ChartClicked .Bar;
this.Close();
}
}
// the form having the pie chart control
public partial class Form1: Form
{
// other methods ...
public void SetDataSource(object src)
{
this.PieChartControl.SetDataSource(src);
}
}
表格2:
// the form having the bar chart control
public partial class Form2: Form
{
// other methods ...
public void SetDataSource(object src)
{
this.BarChartControl.SetDataSource(src);
}
}
public partial PieChartControl: UserControl
{
// other methods ...
public void SetDataSource(object src)
{
// set the series type to Pie etc...
this.chart.DataSource = src;
}
}
piechart控件:
// the form having the bar chart control
public partial class Form2: Form
{
// other methods ...
public void SetDataSource(object src)
{
this.BarChartControl.SetDataSource(src);
}
}
public partial PieChartControl: UserControl
{
// other methods ...
public void SetDataSource(object src)
{
// set the series type to Pie etc...
this.chart.DataSource = src;
}
}
我会这样做: 1) 创建两个包含mschart的用户控件,并调用它们,例如
PieChartControl
和BarChartControl
。公开设置当前数据源的方法(例如,SetDataSource(DataTable dt)
),并将数据源绑定到饼图或条形图的逻辑放在那里
2) 创建3个表单:在Form1
addPieChartControl
、在Form2
addBarChartControl
和Form3
中添加SplitContainer
,您将在其中添加PieChartControl
和BarChartControl
3) ExposeSetDataSource()
方法也在Form1
和Form2
中(它将只调用相应的内部控制方法)
4) 还公开Form3
中的SetDataSource()
方法;它将调用内部PieChartControl
和BarChartControl
的SetDataSource()
方法
5) Form3
还必须公开一个自定义属性(例如,ChartClicked
),指示已单击的图表
6) 在表格3中,订阅PieChartControl
和BarChartControl
7) 当触发Click
事件时,只需设置ChartClicked属性并关闭表单
下面是一些代码示例,帮助您理解我的解释 助手枚举: