托管的“发送到”菜单类





3.00/5 (2投票s)
2002年5月21日
2分钟阅读

72207

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

引言
在我创建的一个应用程序中,有一个使用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方法替换的菜单项 | 
您可以通过两种方式使用此类。第一种是替换现有菜单项,第二种是手动将新的“发送到”菜单项添加到应用程序菜单。如果您使用设计器设计应用程序菜单,则使用第一种方法;如果您手动创建应用程序菜单,则使用第二种方法。
要替换现有菜单项,您必须
- 
  声明一个基于 SentToMenuItem类的表单变量。// [C#] private megaBYTE.SendToMenuItem menuItemSendTo; ' [Visual Basic] Friend WithEvents MenuItemSendTo As megaBYTE.SendToMenuItem 
- 
  创建一个 SentToMenuItem类的实例。// [C#] menuItemSendTo = new megaBYTE.SendToMenuItem(); ' [Visual Basic] Me.MenuItemSendTo = New megaBYTE.SendToMenuItem() 
- 
  如有必要,设置 EnableBitmap属性。// [C#] menuItemSendTo.EnableBitmap = false; ' [Visual Basic] Me.MenuItemSendTo.EnableBitmap = False 
- 
  调用 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示例的部分内容。
