演练:使用单选按钮更新文档中的图表

此演练演示如何使用 Microsoft Office Word 文档级自定义项中的单选按钮,为用户提供在文档中选择图表样式的选项。

**适用于:**本主题中的信息适用于 Word 2013 和 Word 2010 的文档级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能

本演练阐释了以下任务:

  • 在文档级项目中,在设计时向文档中添加图表。

  • 通过将单选按钮添加到用户控件来对它们进行分组。

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

若要查看完整示例,请参见 Office 开发示例和演练中的 Word 控件示例。

说明说明

对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关更多信息,请参见 Visual Studio 设置

系统必备

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

-

Visual Studio 2012 的一个版本,其中包含 Microsoft Office 开发工具。有关更多信息,请参见[将计算机配置为开发 Office 解决方案](bb398242\(v=vs.110\).md)。
  • Word 2013 或 Word 2010。

创建项目

第一步是创建 Word 文档项目。

创建新项目

  • 创建一个名为“我的图表选项”的 Word 文档项目。在向导中,选择**“创建新文档”**。有关更多信息,请参见如何:在 Visual Studio 中创建 Office 项目

    Visual Studio 将在设计器中打开新的 Word 文档并将**“我的图表选项”项目添加到“解决方案资源管理器”**中。

向文档中添加图表

添加图表

  1. 在承载于 Visual Studio 设计器中的 Word 文档中,单击功能区上的**“插入”**选项卡。

  2. 在**“文本”组中,单击“插入对象”下拉按钮,然后单击“对象”**。

    随即打开**“对象”**对话框。

  3. 在**“新建”选项卡上的“对象类型”列表中选择“Microsoft Graph 图表**”,然后单击**“确定”**。

    此时将在文档中的插入点处添加一个图表,并且**“数据表”**窗口出现,其中会显示一些默认数据。

  4. 关闭**“数据表”**窗口使图表接受默认值,然后单击文档内部将焦点从图表移开。

  5. 右击图表,然后单击**“设置对象格式”**。

  6. 在**“设置对象格式”对话框的“布局”选项卡上,选择“正方形”,然后单击“确定”**。

向项目中添加用户控件

文档上的单选按钮默认情况下不互相排斥。通过将这些按钮添加到用户控件中,然后编写代码来控制所选内容,可使这些按钮正常工作。

添加用户控件

  1. 在**“解决方案资源管理器”中选择“我的图表选项”**项目。

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

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

向用户控件中添加 Windows 窗体控件

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

  2. 从**“工具箱”“公共控件”选项卡中,将第一个“单选按钮”**控件拖到该用户控件,然后更改以下属性。

    属性

    名称

    columnChart

    文本

    柱形图

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

    属性

    名称

    barChart

    文本

    条形图

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

    属性

    名称

    lineChart

    文本

    折线图

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

    属性

    名称

    areaBlockChart

    文本

    面积图

添加引用

若要从文档上的用户控件访问图表,则必须在项目中引用 Microsoft.Office.Interop.Graph 程序集。

添加对 Microsoft.Office.Interop.Graph 程序集的引用

  1. 在**“项目”菜单上,单击“添加引用”**。

    将显示**“添加引用”**对话框。

  2. 在**“.NET”选项卡上,选择“Microsoft.Office.Interop.Graph”,然后单击“确定”**。选择该程序集的 14.0.0.0 版。

当某一单选按钮处于选定状态时更改图表样式

若要使这些按钮正常工作,请创建用户控件的公共事件,添加属性以设置选择类型,并为每个单选按钮的 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.Graph.XlChartType = _
        Microsoft.Office.Interop.Graph.XlChartType.xlColumnClustered
    
    Public Property Selection() As Microsoft.Office.Interop.Graph.XlChartType
        Get
            Return Me.selectedType
        End Get
        Set(ByVal value As Microsoft.Office.Interop.Graph.XlChartType)
            Me.selectedType = value
        End Set
    End Property
    
    public event EventHandler SelectionChanged;
    
    private Microsoft.Office.Interop.Graph.XlChartType selectedType =
        Microsoft.Office.Interop.Graph.XlChartType.xlColumnClustered;
    
    public Microsoft.Office.Interop.Graph.XlChartType Selection
    {
        get
        {
            return this.selectedType;
        }
        set
        {
            this.selectedType = value;
        }
    }
    

处理单选按钮的 CheckedChange 事件

  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.Graph.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.Graph.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.Graph.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.Graph.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.Graph.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.Graph.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.Graph.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.Graph.XlChartType.xlLineMarkers;
            if (this.SelectionChanged != null)
            {
                this.SelectionChanged(this, EventArgs.Empty);
            }
        }
    }
    
  5. 在 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);
    }
    

向文档中添加用户控件

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

向文档中添加用户控件

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

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

  2. 在**“解决方案资源管理器”中,右击“ThisDocument.vb”“ThisDocument.cs”,然后单击“视图设计器”**。

  3. 将 ChartOptions 控件从**“工具箱”**拖动到文档中。

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

更改图表类型

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

更改文档中显示的图表类型

  1. 向 ThisDocument 类添加以下事件处理程序。

    Private Sub ChartOptions1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles ChartOptions1.SelectionChanged
    
        Try
            Dim shape As Word.Shape = Me.Shapes.Item(1)
    
            ' Activate the shape.
            shape.Activate()
    
            Dim dataChart As Graph.Chart = CType(shape.OLEFormat.Object, Graph.Chart)
            dataChart.ChartType = Me.ChartOptions1.Selection
    
            ' Deactivate the shape.
            Me.ChartOptions1.Select()
    
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    
    private void ChartOptions1_SelectionChanged(object sender, EventArgs e)
    {
        try
        {
            object index = 1;
            Word.Shape shape = this.Shapes.get_Item(ref index);
    
            // Activate the shape.
            shape.Activate();
    
            Microsoft.Office.Interop.Graph.Chart dataChart = 
                (Microsoft.Office.Interop.Graph.Chart)shape.OLEFormat.Object;
            dataChart.ChartType = this.ChartOptions1.Selection;
    
            // Deactivate the shape.
            this.ChartOptions1.Select();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    
  2. 在 C# 中,必须向 Startup 事件添加用户控件的事件处理程序。

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

测试应用程序

现在,您可以对文档进行测试,以确保选择单选按钮时能正确更新图表样式。

测试文档

  1. 按 F5 运行项目。

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

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

后续步骤

下一步可能要执行以下几项任务:

请参见

概念

使用 Word 的演练

Office 文档上的 Windows 窗体控件的限制

其他资源

Office 开发示例和演练