65.9K
CodeProject 正在变化。 阅读更多。
Home

托管的“发送到”菜单类

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (2投票s)

2002年5月21日

2分钟阅读

viewsIcon

72207

downloadIcon

2166

一篇关于一个小型的托管C++类的文章,该类允许使用Windows资源管理器的“发送到”功能。

Sample Image

引言

在我创建的一个应用程序中,有一个使用MFC的“发送到”菜单类,它显示用户“发送到”扩展的列表,并将文件发送到用户选择的扩展。现在我尝试编写一个Microsoft .NET程序集,我选择了“发送到”菜单类作为程序集的内容。**警告:**程序集源代码可能包含错误。使用程序集源代码的风险自负。

从视觉上看,“发送到”菜单是一个包含菜单子项的菜单,这些子项以用户“发送到”扩展的图形方式表示。子项可以包含或不包含位图。

“发送到”菜单类是System.Windows.Forms.MenuItem类的派生类,包含以下新的公共属性和方法

// [C#] 
public bool EnableBitmap [  get,  set ]
public void Replace ( System.Windows.Forms.MenuItem menuItem , 
                      System.EventHandler eventHandler )
public void Restore (  )
' [Visual Basic] 
Public Property EnableBitmap As Boolean
Public Sub Replace(ByVal menuItem As System.Windows.Forms.MenuItem, _
                   ByVal eventHandler As System.EventHandler)
Public Sub Restore()
EnableBitmap 获取或设置一个值,该值指示子项是否具有位图。
Replace 用“发送到”菜单项替换现有菜单项
Restore 恢复由Replace方法替换的菜单项

您可以通过两种方式使用此类。第一种是替换现有菜单项,第二种是手动将新的“发送到”菜单项添加到应用程序菜单。如果您使用设计器设计应用程序菜单,则使用第一种方法;如果您手动创建应用程序菜单,则使用第二种方法。

要替换现有菜单项,您必须

  1. 声明一个基于SentToMenuItem类的表单变量。

    // [C#]
    private megaBYTE.SendToMenuItem menuItemSendTo;
    ' [Visual Basic] 
    Friend WithEvents MenuItemSendTo As megaBYTE.SendToMenuItem
  2. 创建一个SentToMenuItem类的实例。

    // [C#]
    menuItemSendTo = new megaBYTE.SendToMenuItem();
    ' [Visual Basic] 
    Me.MenuItemSendTo = New megaBYTE.SendToMenuItem()
  3. 如有必要,设置EnableBitmap属性。

    // [C#]
    menuItemSendTo.EnableBitmap = false;
    ' [Visual Basic] 
    Me.MenuItemSendTo.EnableBitmap = False
  4. 调用Replace方法。

    // [C#]
    menuItemSendTo.Replace(menuItemSendToStub, new EventHandler(menuItemSendToStub_Click));
    ' [Visual Basic] 
    Me.MenuItemSendTo.Replace(Me.MenuItemSendToStub, _
                             New EventHandler(AddressOf Me.MenuItemSendToStub_Click))

最重要的是第4点。Replace方法的第一个参数是要替换的项,第二个参数是EventHandler类的新实例。EventHandler类构造函数的参数是替换项的单击事件处理程序。单击事件处理程序方法如下所示:

// [C#]
private void menuItemSendToStub_Click(object sender, System.EventArgs e)
{
  if (e.GetType() == typeof(megaBYTE.SendToClickEventArgs)) 
  {
    OpenFileDialog dlg = new OpenFileDialog();
    dlg.CheckFileExists = true;
    if (dlg.ShowDialog() == DialogResult.OK)
    {
      megaBYTE.SendToClickEventArgs se = (megaBYTE.SendToClickEventArgs)e;
      se.FileName = dlg.FileName;
    }
  }
}
' [Visual Basic] 
Private Sub MenuItemSendToStub_Click(ByVal sender As System.Object, _
                 ByVal e As System.EventArgs) Handles MenuItemSendToStub.Click
  If TypeOf e Is megaBYTE.SendToClickEventArgs Then
    Dim dlg As New OpenFileDialog()
    dlg.CheckFileExists = True
    If dlg.ShowDialog = DialogResult.OK Then
      Dim se As megaBYTE.SendToClickEventArgs
      se = CType(e, megaBYTE.SendToClickEventArgs)
      se.FileName = dlg.FileName
    End If
  End If
End Sub

如果您要手动添加“发送到”菜单,只需将SendToMenuItem类用作System.Windows.Forms.MenuItem类即可。

程序集源代码包含Microsoft SENDTO示例的部分内容。

© . All rights reserved.