此演练演示在 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 控件更改工作表格式设置。