托管的“发送到”菜单类





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()
![]() |
获取或设置一个值,该值指示子项是否具有位图。 |
![]() |
用“发送到”菜单项替换现有菜单项 |
![]() |
恢复由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示例的部分内容。