演练:使用单选按钮更新工作表中的图表

更新:2007 年 11 月

适用于

本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。

项目类型

  • 文档级项目

Microsoft Office 版本

  • Excel 2003

  • Excel 2007

有关更多信息,请参见按应用程序和项目类型提供的功能

此演练演示在 Microsoft Office Excel 工作表中使用单选按钮以供用户快速切换选项的基本操作。在本例中,这些选项更改图表的样式。

若要查看完整示例,请参见 Excel 控件示例

本演练演示以下任务:

  • 将一组单选按钮添加到工作表。

  • 在选择某个选项时更改图表样式。

ms178767.alert_note(zh-cn,VS.90).gif说明:

以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。您安装的 Visual Studio 版本以及使用的设置决定了这些元素。有关更多信息,请参见 Visual Studio 设置

先决条件

您需要以下组件来完成本演练:

  • Visual Studio Tools for Office(Visual Studio 2008 专业版 和 Visual Studio Team System 的可选组件)。

  • Microsoft Office Excel 2003 或 Microsoft Office Excel 2007。

向工作表添加图表

可以创建一个 Excel 工作簿项目来自定义现有工作簿。在此演练中,您将向工作簿中添加一个图表,然后再在新的 Excel 解决方案中使用此工作簿。此演练中的数据源是一个名为“Data for Chart”的工作表。

添加数据

  1. 打开 Excel 2003 或 Excel 2007。

  2. 右击“Sheet3”选项卡,然后单击快捷菜单上的“重命名”。

  3. 将该表重命名为“Data for Chart”。

  4. 将以下数据添加到“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 2003 和 Excel 2007 中是不同的。

在 Excel 2003 中添加图表

  1. 在“插入”菜单上单击“图表”。

    “图表向导”打开。

  2. 保留选中的默认设置,单击“下一步”。

  3. 在“数据区域”框中单击,并清除所有的默认选择。

  4. 在“Data for Chart”表中选择包含数字的单元格块,其中包括从左上角 A4 到右下角 E8 的单元格范围。

  5. 单击“下一步”,然后再单击“下一步”,接受“步骤 3”的所有默认设置。

  6. 在“步骤 4”中,应确保选中“作为其中的对象插入:”。

  7. 在“作为其中的对象插入:”列表中,选择 Sheet1。

  8. 单击“完成”。

  9. 重新放置图表,使单元格“E2”与右上角对齐。

  10. 将文件保存到驱动器 C,并将其命名为“ExcelChart.xls”。

  11. 退出 Excel。

在 Excel 2007 中添加图表

  1. 在“插入”选项卡上的“图表”组中,单击“列”,再单击“所有图表类型”。

  2. 在“插入图表”对话框中,单击“确定”。

  3. 在“设计”选项卡上的“数据”组中,单击“选择数据”。

  4. 在“选择数据源”对话框中,在“图表数据范围”框中单击,并清除任何默认选定内容。

  5. 在“Data for Chart”表中选择包含数字的单元格块,其中包括从左上角 A4 到右下角 E8 的单元格范围。

  6. 在“选择数据源”对话框中,单击“确定”。

  7. 重新放置图表,使单元格“E2”与右上角对齐。

  8. 将文件保存到驱动器 C,并将其命名为“ExcelChart.xls”。

  9. 退出 Excel。

创建新项目

在此步骤中,您将创建一个基于“ExcelChart”工作簿的 Excel 工作簿项目。

创建新项目

  1. 创建一个名为“My Excel Chart”的 Excel 工作簿项目。在向导中,选择“复制现有文档”。

    有关更多信息,请参见如何:创建 Visual Studio Tools for Office 项目

  2. 单击“浏览”按钮,浏览到在此演练前面的步骤中创建的工作簿。

  3. 单击“确定”。

    Visual Studio 在设计器中打开新的 Excel 工作簿,并将“My Excel Chart”项目添加到“解决方案资源管理器”中。

设置图表的属性

创建使用现有工作簿的新 Excel 工作簿项目时,会为工作簿中的所有现有命名范围、列表对象和图表自动创建宿主控件。可以使用“属性”窗口更改 Chart 控件的名称。

更改 Chart 控件的名称

  • 在设计器中选择 Chart 控件,并在“属性”窗口中更改以下属性。

    属性

    Name

    dataChart

    HasLegend

    false

添加控件

此工作表使用单选按钮让用户可以快速更改图表样式。但是,单选按钮需要具有互斥性:一个按钮处于选中状态时,组中不能有其他按钮同时处于选中状态。向工作表中添加多个单选按钮时不会默认具有此行为。

添加此行为的一种方法是将单选按钮分组到一个用户控件中,针对该用户控件编写代码,然后将该用户控件添加到工作表中。

添加用户控件

  1. 在“解决方案资源管理器”中选择“My Excel Chart”项目。

  2. 在“项目”菜单上单击“添加新项”。

  3. 在“添加新项”对话框中单击“用户控件”,将控件命名为“ChartOptions”,然后单击“添加”。

向用户控件中添加单选按钮

  1. 如果该用户控件在设计器中不可见,请在“解决方案资源管理器”中双击“ChartOptions”。

  2. 从“工具箱”的“公共控件”选项卡中,将一个“Radio Button”控件拖动到该用户控件上,然后更改以下属性。

    属性

    Name

    columnChart

    Text

    柱形图

  3. 向该用户控件中添加第二个单选按钮,并更改以下属性。

    属性

    Name

    barChart

    Text

    条形图

  4. 向该用户控件中添加第三个单选按钮,并更改以下属性。

    属性

    Name

    lineChart

    Text

    折线图

  5. 向该用户控件中添加第四个单选按钮,并更改以下属性。

    属性

    Name

    areaBlockChart

    Text

    面积图

然后,编写代码,以在单击某一单选按钮时更新图表。

在选中某一单选按钮时更改图表样式

现在,您可以添加代码以更改图表样式。具体方法为:创建该用户控件的公共事件,添加属性设置选择类型,并为每个单选按钮的 CheckedChanged 事件创建事件处理程序。

创建用户控件的事件和属性

  1. 在“解决方案资源管理器”中右击用户控件,然后单击“查看代码”。

  2. 向 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 事件

  1. 设置 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);
            }
        }
    }
    
  2. 设置 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);
            }
        }
    }
    
  3. 设置 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);
            }
        }
    }
    
  4. 设置 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);
            }
        }
    }
    
  5. 在 C# 中,必须为单选按钮添加事件处理程序。可以将此代码添加到 ChartOptions 构造函数中的 InitializeComponent 调用的下面。有关如何创建事件处理程序的信息,请参见如何:使用 Visual Studio Tools for 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);
    }
    

向工作表添加用户控件

生成解决方案时,新的用户控件将自动添加到“工具箱”中。然后可以将该控件从“工具箱”拖动到工作表中。

向工作表添加用户控件

  1. 在“生成”菜单上单击“生成解决方案”。

    “ChartOptions”用户控件便会被添加到“工具箱”中。

  2. 在“解决方案资源管理器”中,右击“Sheet1.vb”或“Sheet1.cs”,再单击“视图设计器”。

  3. 将“ChartOptions”控件从“工具箱”拖动到工作表中。

    一个名为 my_Excel_Chart_ChartOptions1 的新控件便会被添加到项目中。

  4. 将该控件的名称更改为“ChartOptions1”。

更改图表类型

若要更改图表类型,请创建一个事件处理程序,以根据在用户控件中选择的选项来设置样式。

更改工作表中显示的图表的类型

  1. 向 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());
        }
    }
    
  2. 在 C# 中,必须为用户控件向 Startup 事件添加事件处理程序,如下所示。有关如何创建事件处理程序的信息,请参见如何:使用 Visual Studio Tools for Office 创建事件处理程序

    this.ChartOptions1.SelectionChanged += new EventHandler(ChartOptions1_SelectionChanged);
    

测试应用程序

现在便可对工作簿进行测试,验证选中某个单选按钮时是否可以正确设置图表样式。

测试工作簿

  1. 按 F5 运行项目。

  2. 选择不同的单选按钮。

  3. 确认图表样式随所选选项发生了相应的更改。

后续步骤

此演练演示在工作表中使用单选按钮和图表样式的基本操作。下一步可能要执行以下几项任务:

请参见

概念

使用 Excel 的演练