我會做一些這樣的:
1)創建一個包含2個MSChart的用戶控件,並且如給他們打電話PieChartControl
和BarChartControl
。暴露AA方法來設置當前的數據源(例如SetDataSource(DataTable dt)
)和放在那裏的邏輯到數據源的餅圖或條形圖結合
2)創建的3種形式:在Form1
添加PieChartControl
,在Form2
添加BarChartControl
和Form3
添加一個SplitContainer
,您將在其中添加PieChartControl
和BarChartControl
。
3)暴露SetDataSource()
方法也Form1
Form2
和(它只是調用相應的內控制方法)
4)暴露也SetDataSource()
方法在Form3
;它會調用內部PieChartControl
和BarChartControl
的SetDataSource()
方法。
5)Form3
也必須公開定製屬性(例如,ChartClicked
),表示已單擊
6圖表)在Form3認購Click
事件(或DoubleClick
,如你所願)爲PieChartControl
和BarChartControl
7)當觸發Click
事件,只需設置ChartClicked屬性並關閉表格
它會遵循一些代碼示例來幫助您理解我的解釋。
助手枚舉:
public enum ChartClicked { None = 0, Pie = 1, Bar = 2 }
的MainForm:
// 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);
}
}
窗體2:
// the form having the bar chart control
public partial class Form2: Form
{
// other methods ...
public void SetDataSource(object src)
{
this.BarChartControl.SetDataSource(src);
}
}
PieChartControl:
public partial PieChartControl: UserControl
{
// other methods ...
public void SetDataSource(object src)
{
// set the series type to Pie etc...
this.chart.DataSource = src;
}
}
什麼阻止你把它產生在形式1和一個圖表的方法調用在Form3中的Form 2中的其他圖表的所以,當Form3加載時,你生成它的兩個圖表?然後單擊可以使用form1.Show()例如顯示任何您喜歡的表單。我說方法調用不是一個可怕的複製粘貼,如果你認爲涉及太多的複製,那麼你應該考慮創建一個包含你的圖表生成邏輯的助手類,以便從這兩個表單中調用這樣的助手。 –
當您單擊Form3中的兩個圖表中的一個時,是否已關閉Form3?總之,form3總是可見或不可以? – digEmAll
@digEmall ..當我點擊圖表中的任何一個時,form3將被關閉,並且其中一個圖表將被打開..並且form3將被關閉... –