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

更新:2007 年 11 月

适用于

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

项目类型

  • 文档级项目

Microsoft Office 版本

  • Word 2007

  • Word 2003

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

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

本演练阐释以下任务:

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

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

  • 在某个选项处于选定状态时更改图表样式。

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

ms178766.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 Word 2003 或 Microsoft Office Word 2007。

此演练使用 Word 2003 中的菜单,但是也可以在 Word 2007 功能区中使用同样的选项。

创建项目

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

创建新项目

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

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

向文档中添加图表

在 Word 2003 项目中,Visual Studio 工具栏上的“插入”菜单包含用来添加图表的 Word 命令。

添加图表

  1. 在“插入”菜单上单击“对象”。

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

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

    如果“插入”菜单不可见,则必须先单击文档内部使其获得焦点。有关更多信息,请参见Visual Studio 环境中的 Office 菜单

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

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

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

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

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

向项目中添加用户控件

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

添加用户控件

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

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

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

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

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

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

    属性

    Name

    columnChart

    Text

    柱形图

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

    属性

    Name

    barChart

    Text

    条形图

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

    属性

    Name

    lineChart

    Text

    折线图

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

    属性

    Name

    areaBlockChart

    Text

    面积图

添加引用

若要从文档上的用户控件访问图表,则必须在项目中引用 Microsoft Graph 11.0 对象库。

添加对 Microsoft Graph 11.0 对象库的引用

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

    将出现“添加引用”对话框。

  2. 单击“COM”选项卡。

  3. 在“组件名称”列表中选择“Microsoft Graph 11.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 调用的下面。有关创建事件处理程序的信息,请参见如何:使用 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. 在“解决方案资源管理器”中,右击“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
            'first object is the runtime storage control
            Dim index As Object = 2
            Dim shape As Word.Shape = Me.Shapes.Item(index)
    
            '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
        {
            //first object is the runtime storage control
            object index = 2;
            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 的演练

在 Word 文档中使用 Windows 窗体控件

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

其他资源

Office 开发示例和演练