共用方式為


逐步解說:使用選項按鈕更新文件中的圖表

更新:2007 年 11 月

適用於

本主題中的資訊僅適用於指定的 Visual Studio Tools for Office 專案和 Microsoft Office 版本。

專案類型

  • 文件層級專案

Microsoft Office 版本

  • Word 2007

  • Word 2003

如需詳細資訊,請參閱依應用程式和專案類型提供的功能

本逐步解說示範如何在 Microsoft Office Word 的文件層級自訂中使用選項按鈕,讓使用者選擇圖表樣式。

這個逐步解說將說明下列工作:

  • 在設計階段,透過文件層級專案將圖表加入至文件。

  • 將選項按鈕加入至使用者控制項,使選項按鈕形成群組。

  • 在選取某個選項時變更圖表樣式。

若要查看完成範例的結果,請參閱 Word 控制項的範例

注意事項:

您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定

必要條件

您需要下列元件才能完成此逐步解說:

  • Visual Studio Tools for Office (Visual Studio 2008 Professional 和 Visual Studio Team System 的選擇性元件)。

  • Microsoft Office Word 2003 或 Microsoft Office Word 2007。

這個逐步解說使用 Word 2003 中的功能表,但是 Word 2007 功能區中也有相同的選項。

建立專案

第一步就是建立 Word 文件專案。

若要建立新的專案

  • 建立名為 My Chart Options 的 Word 文件專案。選取精靈中的 [建立新文件]。如需詳細資訊,請參閱 HOW TO:建立 Visual Studio Tools for Office 專案

    Visual Studio 會在設計工具中開啟新的 Word 文件,並將 [My Chart Options] 專案加入至 [方案總管]。

將圖表加入至文件

在 Word 2003 專案中,Visual Studio 工具列的 [插入] 功能表會包含用來加入圖表的 Word 命令。

若要加入圖表

  1. 在 [插入] 功能表上,按一下 [物件]。

    [物件] 對話方塊隨即開啟。

    注意事項:

    如果無法看到 [插入] 功能表,您必須先在文件內部按一下,使其成為焦點。如需詳細資訊,請參閱在 Visual Studio 環境下的 Office 功能表

  2. 在 [建立新物件] 索引標籤的 [物件類型] 清單上,選取 [Microsoft Graph 圖表],然後按一下 [確定]。

    圖表會加入至文件上插入點的位置,並且顯示附帶預設資料的 [資料工作表] 視窗。

  3. 關閉 [資料工作表] 視窗以接受圖表中的預設值,然後在文件內按一下,將焦點移離圖表。

  4. 以滑鼠右鍵按一下圖表,然後按一下 [格式化物件]。

  5. 在 [格式化物件] 對話方塊的 [配置] 索引標籤中,選取 [方形],然後按一下 [確定]。

將使用者控制項加入至專案

文件上的選項按鈕預設不會互斥。您可以將它們加入至使用者控制項,然後撰寫程式碼控制選取範圍,讓它們正確運作。

若要加入使用者控制項

  1. 在 [方案總管] 中,選取 [My Chart Options] 專案。

  2. 在 [專案] 功能表上,按一下 [加入新項目]。

  3. 在 [加入新項目] 對話方塊中,按一下 [使用者控制項],將控制項命名為 ChartOptions,然後按一下 [加入]。

若要將 Windows Form 控制項加入至使用者控制項

  1. 如果在設計工具中看不到使用者控制項,請按兩下 [方案總管] 中的 [ChartOptions]。

  2. 從 [工具箱] 的 [通用控制項] 索引標籤,將第一個 [選項按鈕] 控制項拖曳至使用者控制項,並變更下列屬性。

    屬性

    Name

    columnChart

    Text

    Column Chart

  3. 將第二個 [選項按鈕] 加入至使用者控制項,並變更下列屬性。

    屬性

    Name

    barChart

    Text

    Bar Chart

  4. 將第三個 [選項按鈕] 加入至使用者控制項,並變更下列屬性。

    屬性

    Name

    lineChart

    Text

    Line Chart

  5. 將第四個 [選項按鈕] 加入至使用者控制項,並變更下列屬性。

    屬性

    Name

    areaBlockChart

    Text

    Area Block Chart

加入參考

若要從文件上的使用者控制項存取圖表,在專案中必須具有到 Microsoft Graph 11.0 物件程式庫的參考。

若要加入參考至 Microsoft Graph 11.0 物件程式庫

  1. 在 [專案] 功能表上,按一下 [加入參考]。

    [加入參考] 對話方塊隨即出現。

  2. 按一下 [COM] 索引標籤。

  3. 在 [元件名稱] 清單中選取 [Microsoft Graph 11.0 Object Library],然後按一下 [確定]。

在選取某個選項按鈕時變更圖表樣式

若要讓按鈕正確運作,請在使用者控制項上建立公用 (Public) 事件、加入屬性以設定選取類型,並針對每個選項按鈕的 CheckedChanged 事件建立程序。

若要在使用者控制項上建立事件和屬性

  1. 以滑鼠右鍵按一下 [方案總管] 中的使用者控制項,然後按一下 [檢視程式碼]。

  2. 在 ChartOptions 類別 (Class) 中,加入建立 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 建構函式 (Constructor) 中 (在 InitializeComponent 呼叫之下) 加入這個程式碼。如需建立事件處理常式的詳細資訊,請參閱 HOW TO:在 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 Form 控制項

Office 文件上的 Windows Form 控制項限制

其他資源

Office 程式開發範例和逐步解說