细品RibbonX(54):RibbonX和Visual Studio(2)

细品RibbonX(54):RibbonX和Visual Studio(2)

资料整理来自于论坛
完整版下载地址:http://download.csdn.net/download/nodeman/10264659

 

 Loading ...

 

下面,让我们继续使用Visual Studio为功能区添加更多的功能。

  • 创建带有组和控件的新选项卡
  • 在现有的选项卡中添加新控件
  • 在Office菜单中添加新控件
  • 重利用现有选项卡中的控件
  • 重利用Office菜单中的控件

重利用是指将现有的控件实现新功能或者增强现有的功能。
在Visual Studio中处理图形
在使用Visual Studio时,必须提供图形作为加载项的一部分,这意味着要创建额外的代码。满足这项特定需求的XML作为customUI元素的一部分:

<customUIxmlns="http://schemas.microsoft.com/office/2006/01/customui"
          onLoad="Ribbon_Load"
          loadImage="GetImage">

在代码中,loadImage属性提供对GetImage()方法的调用,但GetImage()方法不知道要求向Office应用程序发送哪个图标或图像,因此必须以某种方式创建使它能处理任何需求。下面是GetImage()方法的代码:

    Public Function GetImage(ByVal ImageName As String) As Bitmap
        ' 包含传递到Office的位图
        Dim ThisBitmap As Bitmap = New Bitmap(20, 20)
 
        ' 发现图像名和相应的资源
        Select Case ImageName
            Case "Colorblk2"
                ThisBitmap = New Bitmap(My.Resources.Colorblk2)
            Case "TIME"
                ThisBitmap = New Bitmap(My.Resources.TIME.ToBitmap())
        End Select
 
        ' 返回简单的位图
        Return ThisBitmap
    End Function

本例使用两类不同的图像。第一个是标准的位图,Colorblk2,因此可以直接使用;第二个是一个图标,使用前必须调用ToBitmap()方法将它转换为位图。
注意,代码需要从“资源”中请求图像,因此必须通过“添加资源”将图像添加到资源窗口。
当装载功能区时执行任务
使用Visual Studio创建的默认项目包括OnLoad()方法,当Office装载功能区时自动执行该方法。onLoad属性决定初始化时Office调用的方法,可以修改方法以满足需要,默认的方法名为onLoad()。本例中相应的回调代码为:

    Public Sub Ribbon_Load(ByVal ribbonUI As Office.IRibbonUI)
        '保存Ribbon引用
        Me.ribbon = ribbonUI
        '初始化下划线状态
        UnderlineState = False
        '显示装载消息
        MessageBox.Show("功能区装载")
    End Sub

本例提供了一个以某种方式工作的控件示例,该控件取决于用户对另一个控件的选择。本例中,用户能够控制是否应用程序允许下划线功能。因为Excel需要确定在Ribbon装载时该控件的状态,所以代码包含了一个名为UnderlineState的初始化变量。
在调试时,在代码中包括状态信息是有帮助的。这里,只是简单地告诉功能区已经装载。如果没有看到这个消息框,则表明加载项出现了错误。
创建新的选项卡、组和控件
最经常执行的任务之一是为应用程序创建新的选项卡、组和控件。为达到此目的,开始仍然需要添加XML。本例中,添加的XML代码如下:

      <tabid="myTab"
           label="我的选项卡">
        <groupid="MyGroup"
               label="我的组">
          <buttonid="myButton"
                  label="我的按钮"
                  image="Colorblk2"
                  size="large"
                  onAction="MyButton_ClickHandler"/>
        </group>
      </tab>

创建了一个名为“我的选项卡”的选项卡,包含一个名为“我的组”的组,其中含有一个名为“我的按钮”的按钮。使用了自定义图像,因此在image属性中添加了相应的信息。当用户单击“我的按钮”时,调用myButton_ClickHandler()方法:

    Public Sub myButton_ClickHandler(ByVal Control As Office.IRibbonControl)
        ' 显示一条简单的消息
        MessageBox.Show("我的按钮被单击")
    End Sub

修改或重利用已有的选项卡、组和控件
有时,希望修改或重利用已有的选项卡、组或控件,而不是创建新的。例如,可能想改变“格式刷”的功能,满足内在的格式需求,或者完全隐藏某些选项卡、组或控件。
下面的XML代码在“开始”选项卡中添加一个控件:

      <tabidMso="TabHome">
        <groupid="BehaviorChange"
               label="操作"
               insertAfterMso="GroupFont">
          <toggleButtonid="StopUnderline"
                        label="中止下划线功能"
                        onAction="StopUnderline_ClickHandler"
                        getPressed="StopUnderline_GetPressed"
                        size="large"
                        imageMso="ShapeFillColorPicker"
                        insertBeforeMso="UnderlineGallery"/>  
        </group>
      </tab>

在修改Office已有的元素时,使用idMso属性。新创建的“操作”组使用insertAfterMso属性指定该组在“开始”选项卡中的位置。
本例中,toggleButton控件除了需要通常的onAction属性外,还需要getPressed属性来获取按钮的状态。这两个属性对应的回调代码为:

    Public Sub StopUnderline_ClickHandler(ByVal Control As Office.IRibbonControl, ByVal Pressed As Boolean)
        ' 存储当前按钮的状态
        UnderlineState = Pressed
 
        ' 在屏幕上显示正确的状态
        ribbon.InvalidateControl(Control.Id)
    End Sub
 
    Public Function StopUnderline_GetPressed(ByVal Control As Office.IRibbonControl) As Boolean
        ' 返回当前的按下状态
        Return UnderlineState
    End Function

重利用现有的控件的处理过程与修改现有的控件不同。本例中,必须添加command元素:

  <commands>
    <commandidMso="Underline"
             onAction="myUnderline"/>
    <commandidMso="FileSaveAsExcel97_2003"
             onAction="FileSaveAs_ClickHandler"/>
  </commands>

本示例重利用了两个控件:“开始”选项卡中的“下划线”按钮,以及“Office菜单”中“另存为”菜单的“Excel 97-2003工作簿”项目。本示例重载onAction属性,这是最常执行的重载。然而,应该看看其它需要的回调,例如处理切换按钮时的getPressed。

    Public Sub myUnderline(ByVal Control As Office.IRibbonControl, ByVal Pressed As Boolean, ByRef CancelDefault As Boolean)
        ' 检查下划线控件的状态
        If (UnderlineState) Then
            ' 显示错误消息
            MessageBox.Show("没有允许操作的下划线")
 
            ' 设置控件使之不能被按下
            Pressed = False
 
            ' 在屏幕上显示正确的状态
            ribbon.InvalidateControl(Control.Id)
 
            ' 告诉Office不要执行默认的操作
            CancelDefault = True
        Else
            ' 否则,告诉Office执行默认的操作
            CancelDefault = False
        End If
    End Sub
 
    Public Sub FileSaveAs_ClickHandler(ByVal Control As Office.IRibbonControl, ByRef CancelDefault As Boolean)
        ' 包含用户的响应
        Dim Response As DialogResult
 
        ' 要求用户保存文件
        Response = _
           MessageBox.Show("保存为老版本. 确定吗?", _
                           "老文件版本警告", _
                           MessageBoxButtons.YesNo)
 
        ' 检查响应
        If Response = DialogResult.Yes Then
            CancelDefault = False
        Else
            CancelDefault = True
        End If
    End Sub

myUnderline()方法控制“下划线”控件是否按正常状态工作,还是基于用户是否按下“中止下划线功能”按钮而提供其它功能。正常状态工作时,该方法简单地设置CancelDefault为false,告诉Office执行缺省的操作。
此外,当用户按下“中止下划线功能”按钮时,该方法显示一条消息,说明下划线控件不工作了。然后设置Pressed为false,意味着下划线控件不会显示像它正常状态下按下时的操作。接着,重设控件为期望的设置。最后,设置CancelDefault为true。
修改或重利用Office菜单
Office菜单包含许多配置和文件项,不直接与具体操作相关。当希望创建与具体操作无关的项目时,将其添加到OfficeMenu项中。

    <officeMenu>
      <menuidMso="FilePrepareMenu">
        <buttonid="NewPrepButton"
                label="我的准备按钮"
                description="Prepare Time"
                image="TIME"
                insertBeforeMso="FileProperties"
                onAction="NewPrepButton_ClickHandler"/>
      </menu>
      <splitButtonidMso="FileSaveAsMenu">
        <menuidMso="FileSaveAsMenu">
          <buttonid="SayHello"
                  label="问好"
                  description="This button says hello!"
                  image="Colorblk2"
                  onAction="SayHello_ClickHandler"/>
        </menu>
      </splitButton>
    </officeMenu>

上述代码演示了如何处理不同的控件,例如本例中的菜单和拆分按钮。相应的回调代码如下:

    Public Sub NewPrepButton_ClickHandler(ByVal Control As Office.IRibbonControl)
        ' 显示一条简单的消息
        MessageBox.Show("准备好了吗")
    End Sub
 
    Public Sub SayHello_ClickHandler(ByVal Control As Office.IRibbonControl)
        ' 显示一条简单的消息
        MessageBox.Show("Hello")
    End Sub

本示例最终效果的部分截图如下:


使用startFromScratch模式创建功能区
要从头开始创建功能区,只需在ribbon元素中使用startFromScratch属性:

    <ribbonstartFromScratch="true">

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值