演练:使用单选按钮更新工作表中的图表
此演练演示在 Microsoft Office Excel 工作表中使用单选按钮以供用户快速切换选项的基本操作。 在本例中,这些选项更改图表的样式。
**适用于:**本主题中的信息适用于 Excel 2007 和 Excel 2010 的文档级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能。
若要查看结果(作为完整示例),请参见 Office 开发示例和演练中的 Excel 控件示例。
本演练阐释了以下任务:
将一组单选按钮添加到工作表。
在选择某个选项时更改图表样式。
提示
以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 您安装的 Visual Studio 版本以及使用的设置决定了这些元素。 有关更多信息,请参见 使用设置。
系统必备
您需要以下组件来完成本演练:
-
Visual Studio 2010 的一个版本,其中包含 Microsoft Office 开发工具。有关更多信息,请参见[将计算机配置为开发 Office 解决方案](bb398242\(v=vs.100\).md)。
- Microsoft Office Excel 2007 或 Excel 2010。
向工作表添加图表
可以创建一个 Excel 工作簿项目来自定义现有工作簿。 在此演练中,您将向工作簿中添加一个图表,然后再在新的 Excel 解决方案中使用此工作簿。 此演练中的数据源是一个名为**“Data for Chart”**的工作表。
添加数据
打开 Microsoft Excel。
右击**“Sheet3”选项卡,然后单击快捷菜单上的“重命名”**。
将该表重命名为“Data for Chart”。
将以下数据添加到**“Data for Chart”**中,其中单元格 A4 对应左上角的第一个数据,E8 对应于右下角的最后一个数据。
Q1
Q2
Q3
Q4
West
500
550
550
600
East
600
625
675
700
North
450
470
490
510
South
800
750
775
790
接下来,向第一个工作表中添加一个图表以显示数据。
在 Excel 中添加图表
在**“插入”选项卡上的“图表”组中,单击“列”,再单击“所有图表类型”**。
在**“插入图表”对话框中,单击“确定”**。
在**“设计”选项卡上的“数据”组中,单击“选择数据”**。
在**“选择数据源”对话框中,在“图表数据范围”**框中单击,并清除任何默认选定内容。
在**“Data for Chart”**表中选择包含数字的单元格块,其中包括从左上角 A4 到右下角 E8 的单元格范围。
在**“选择数据源”对话框中,单击“确定”**。
重新放置图表,使单元格**“E2”**与右上角对齐。
将文件保存到驱动器 C,并将其命名为**“ExcelChart.xls”**。
退出 Excel。
创建新项目
在此步骤中,您将创建一个基于**“ExcelChart”**工作簿的 Excel 工作簿项目。
创建新项目
创建一个名为“My Excel Chart”的 Excel 工作簿项目。 在向导中,选择**“复制现有文档”**。
有关更多信息,请参见如何:在 Visual Studio 中创建 Office 项目。
单击**“浏览”**按钮,浏览到在此演练前面的步骤中创建的工作簿。
单击**“确定”**。
Visual Studio 在设计器中打开新的 Excel 工作簿,并将**“My Excel Chart”项目添加到“解决方案资源管理器”**中。
设置图表的属性
创建使用现有工作簿的新 Excel 工作簿项目时,会为工作簿中的所有现有命名范围、列表对象和图表自动创建宿主控件。 可以使用**“属性”**窗口更改 Chart 控件的名称。
更改 Chart 控件的名称
在设计器中选择 Chart 控件,并在**“属性”**窗口中更改以下属性。
Property
值
名称
dataChart
HasLegend
false
添加控件
此工作表使用单选按钮让用户可以快速更改图表样式。 但是,单选按钮需要具有互斥性:一个按钮处于选中状态时,组中不能有其他按钮同时处于选中状态。 向工作表中添加多个单选按钮时不会默认具有此行为。
添加此行为的一种方法是将单选按钮分组到一个用户控件中,针对该用户控件编写代码,然后将该用户控件添加到工作表中。
添加用户控件
在**“解决方案资源管理器”中选择“My Excel Chart”**项目。
在**“项目”菜单上,单击“添加新项”**。
在**“添加新项”对话框中单击“用户控件”,将控件命名为“ChartOptions”,然后单击“添加”**。
向用户控件中添加单选按钮
如果该用户控件在设计器中不可见,请在**“解决方案资源管理器”中双击“ChartOptions”**。
从**“工具箱”的“公共控件”选项卡中,将一个“Radio Button”**控件拖动到该用户控件上,然后更改以下属性。
Property
值
名称
columnChart
Text
柱形图
向该用户控件中添加第二个单选按钮,并更改以下属性。
Property
值
名称
barChart
Text
条形图
向该用户控件中添加第三个单选按钮,并更改以下属性。
Property
值
名称
lineChart
Text
折线图
向该用户控件中添加第四个单选按钮,并更改以下属性。
Property
值
名称
areaBlockChart
Text
面积图
然后,编写代码,以在单击某一单选按钮时更新图表。
在选中某一单选按钮时更改图表样式
现在,您可以添加代码以更改图表样式。 具体方法为:创建该用户控件的公共事件,添加属性设置选择类型,并为每个单选按钮的 CheckedChanged 事件创建事件处理程序。
创建用户控件的事件和属性
在**“解决方案资源管理器”中右击用户控件,然后单击“查看代码”**。
向 ChartOptions 类添加代码以创建 SelectionChanged 事件和 Selection 属性。
Public Event SelectionChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Private selectedType As Microsoft.Office.Interop.Excel.XlChartType = _ Microsoft.Office.Interop.Excel.XlChartType.xlColumnClustered Public Property Selection() As Microsoft.Office.Interop.Excel.XlChartType Get Return Me.selectedType End Get Set(ByVal value As Microsoft.Office.Interop.Excel.XlChartType) Me.selectedType = value End Set End Property
public event EventHandler SelectionChanged; private Microsoft.Office.Interop.Excel.XlChartType selectedType = Microsoft.Office.Interop.Excel.XlChartType.xlColumnClustered; public Microsoft.Office.Interop.Excel.XlChartType Selection { get { return this.selectedType; } set { this.selectedType = value; } }
处理单选按钮的 CheckedChanged 事件
设置 areaBlockChart 单选按钮的 CheckedChanged 事件处理程序中的图表类型,然后引发事件。
Private Sub areaBlockChart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles areaBlockChart.CheckedChanged If (CType(sender, RadioButton).Checked) Then Me.selectedType = Microsoft.Office.Interop.Excel.XlChartType.xlAreaStacked RaiseEvent SelectionChanged(Me, EventArgs.Empty) End If End Sub
private void areaBlockChart_CheckedChanged(object sender, EventArgs e) { if (((RadioButton)sender).Checked) { this.selectedType = Microsoft.Office.Interop.Excel.XlChartType.xlAreaStacked; if (this.SelectionChanged != null) { this.SelectionChanged(this, EventArgs.Empty); } } }
设置 barChart 单选按钮的 CheckedChanged 事件处理程序中的图表类型。
Private Sub barChart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles barChart.CheckedChanged If (CType(sender, RadioButton).Checked) Then Me.selectedType = Microsoft.Office.Interop.Excel.XlChartType.xlBarClustered RaiseEvent SelectionChanged(Me, EventArgs.Empty) End If End Sub
private void barChart_CheckedChanged(object sender, EventArgs e) { if (((RadioButton)sender).Checked) { this.selectedType = Microsoft.Office.Interop.Excel.XlChartType.xlBarClustered; if (this.SelectionChanged != null) { this.SelectionChanged(this, EventArgs.Empty); } } }
设置 columnChart 单选按钮的 CheckedChanged 事件处理程序中的图表类型。
Private Sub columnChart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles columnChart.CheckedChanged If (CType(sender, RadioButton).Checked) Then Me.selectedType = Microsoft.Office.Interop.Excel.XlChartType.xlColumnClustered RaiseEvent SelectionChanged(Me, EventArgs.Empty) End If End Sub
private void columnChart_CheckedChanged(object sender, EventArgs e) { if (((RadioButton)sender).Checked) { this.selectedType = Microsoft.Office.Interop.Excel.XlChartType.xlColumnClustered; if (this.SelectionChanged != null) { this.SelectionChanged(this, EventArgs.Empty); } } }
设置 lineChart 单选按钮的 CheckedChanged 事件处理程序中的图表类型。
Private Sub lineChart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles lineChart.CheckedChanged If (CType(sender, RadioButton).Checked) Then Me.selectedType = Microsoft.Office.Interop.Excel.XlChartType.xlLineMarkers RaiseEvent SelectionChanged(Me, EventArgs.Empty) End If End Sub
private void lineChart_CheckedChanged(object sender, EventArgs e) { if (((RadioButton)sender).Checked) { this.selectedType = Microsoft.Office.Interop.Excel.XlChartType.xlLineMarkers; if (this.SelectionChanged != null) { this.SelectionChanged(this, EventArgs.Empty); } } }
在 C# 中,必须为单选按钮添加事件处理程序。 可以将此代码添加到 ChartOptions 构造函数中的 InitializeComponent 调用的下面。 有关如何创建事件处理程序的信息,请参见如何:在 Office 项目中创建事件处理程序。
public ChartOptions() { InitializeComponent(); areaBlockChart.CheckedChanged += new EventHandler(areaBlockChart_CheckedChanged); barChart.CheckedChanged += new EventHandler(barChart_CheckedChanged); columnChart.CheckedChanged += new EventHandler(columnChart_CheckedChanged); lineChart.CheckedChanged += new EventHandler(lineChart_CheckedChanged); }
向工作表添加用户控件
生成解决方案时,新的用户控件将自动添加到**“工具箱”中。 然后可以将该控件从“工具箱”**拖动到工作表中。
向工作表添加用户控件
在**“生成”菜单上,单击“生成解决方案”**。
**“ChartOptions”用户控件便会被添加到“工具箱”**中。
在**“解决方案资源管理器”中,右击“Sheet1.vb”或“Sheet1.cs”,再单击“视图设计器”**。
将**“ChartOptions”控件从“工具箱”**拖动到工作表中。
一个名为 my_Excel_Chart_ChartOptions1 的新控件便会被添加到项目中。
将该控件的名称更改为“ChartOptions1”。
更改图表类型
若要更改图表类型,请创建一个事件处理程序,以根据在用户控件中选择的选项来设置样式。
更改工作表中显示的图表的类型
向 Sheet1 类添加以下事件处理程序。
Private Sub ChartOptions1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles ChartOptions1.SelectionChanged Try dataChart.ChartType = Me.ChartOptions1.Selection Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
private void ChartOptions1_SelectionChanged(object sender, EventArgs e) { try { dataChart.ChartType = this.ChartOptions1.Selection; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
在 C# 中,必须为用户控件向 Startup 事件添加事件处理程序,如下所示。 有关如何创建事件处理程序的信息,请参见如何:在 Office 项目中创建事件处理程序。
this.ChartOptions1.SelectionChanged += new EventHandler(ChartOptions1_SelectionChanged);
测试应用程序
现在便可对工作簿进行测试,验证选中某个单选按钮时是否可以正确设置图表样式。
测试工作簿
按 F5 运行项目。
选择不同的单选按钮。
确认图表样式随所选选项发生了相应的更改。
后续步骤
此演练演示在工作表中使用单选按钮和图表样式的基本操作。 下一步可能要执行以下几项任务:
部署项目。 有关更多信息,请参见部署 Office 解决方案。
使用按钮填充文本框。 有关更多信息,请参见演练:使用按钮在工作表的文本框中显示文本。
使用复选框更改工作表的格式设置。 有关更多信息,请参见演练:使用 CheckBox 控件更改工作表格式设置。