我会这样做:
1) 创建 2 个包含 mschart 的用户控件,并调用它们,例如PieChartControl 和 BarChartControl。公开一个方法来设置当前数据源(例如 SetDataSource(DataTable dt) )并将数据源绑定到 PieChart 或 BarChart 的逻辑
2) 创建 3 个表单:在 Form1 中添加 PieChartControl,在 Form2 中添加 BarChartControl,在 Form3 中添加 SplitContainer,您将在其中添加 PieChartControl 和 @987654331 @。
3) 在Form1 和Form2 中也暴露SetDataSource() 方法(它只会调用相应的内部控制方法)
4) 在Form3 中也公开SetDataSource() 方法;它将同时调用内部PieChartControl 和BarChartControl 的SetDataSource() 方法。
5) Form3 还必须公开一个自定义属性(例如 ChartClicked )指示已单击的图表
6) 在 Form3 中为 PieChartControl 和 BarChartControl 订阅 Click 事件(或 DoubleClick,如您所愿)
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();
}
}
}
Form3:
// 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();
}
}
Form1:
// the form having the pie chart control
public partial class Form1: Form
{
// other methods ...
public void SetDataSource(object src)
{
this.PieChartControl.SetDataSource(src);
}
}
Form2:
// 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;
}
}