BeforeShowContextMenu显示表的右键菜单之前触发。我们可以在此事件中修改显示的菜单。替换成我们自己自定义的菜单,以实现个性化定制。
e参数 | 说明 |
ContextMenu | 此参数返回系统默认的右键菜单,我们既可以自己弄一个全新的菜单赋值给它,以替换系统原本的默认菜单,也可以在系统默认菜单上进行添加、删除一些菜单,来实现右键菜单的个性化定制。 |
Cancel | 此参数可以禁用某些系统默认的右键菜单。 |
要想个性化定制表格的右键菜单的第一步,就是需要在“代码管理”——“右键菜单”里面做一套自己的右键菜单。
第二步,到表事件BeforeShowContextMenu中写代码。
Vb.Net |
Private m_haveAddColumnMenu As Boolean=False '弄一个临时变量,用来记录当前右键菜单是否添加过, Public Sub BeforeShowContextMenu(sender As Object,e As sanMuSoft.CS.WinForm.BeforeShowContextMenuEventArgs) Select Case e.HitType Case HitTestTypeEnum.RowHeader '如果是行标题,直接用自定义菜单代替 e.ContextMenu=Proj.GridContextMenu("选择区域右键菜单") Case HitTestTypeEnum.ColumnHeader '这里可以单独地添加一个或多个自定义菜单 If m_haveAddColumnMenu=False Then '如果没有添加过菜单就添加,添加过了就不再重复添加了 Dim lnk As New SmCommandLink() lnk.Name="lnkTestMenu" '命令菜单上显示的文本 lnk.Text="插入右键菜单" '是否显示分隔符 lnk.Delimiter=True '鼠标移动到此菜单上时会提示出来的信息 lnk.ToolTipText="这是插入右键菜单的提示信息" Dim cmd As New SmCommand() cmd.Name="cmdTestMenu" cmd.Text="插入右键菜单" cmd.ToolTipText="命令中设置的ToolTipText" '设置命令的图标 cmd.Image=Sys.GetImage("accept_16x16.png",Path.Combine(Proj.ApplicationPath,"Images")) '绑定命令的单击事件 AddHandler cmd.Click, AddressOf UserCommand_Click '将命令引用到菜单链接里面 lnk.Command=cmd '将菜单链接添加到系统默认菜单里面 e.ContextMenu.CommandLinks.Add(lnk) m_haveAddColumnMenu=True End If Case Else '如果是其他部位的右键菜单,一律禁用 e.Cancel=True End Select End Sub Private Sub UserCommand_Click(ByVal sender As System.Object, ByVal e As C1.Win.C1Command.ClickEventArgs) '获得对命令的引用 Dim cmd As SmCommand = CType(sender, SmCommand) '获得对SmCommandLink的引用 Dim lnk As sanMuSoft.CS.WinForm.Controls.SmCommandLink = CType(e.CallerLink, sanMuSoft.CS.WinForm.Controls.SmCommandLink) MessageBox.Show(String.Format("当前菜单命令的文本为:{0},当前命令的名称为:{1}",lnk.Text,cmd.Name)) End Sub |
C# |
private bool m_haveAddColumnMenu = false; // 弄一个临时变量,用来记录当前右键菜单是否添加过, public void BeforeShowContextMenu(object sender, sanMuSoft.CS.WinForm.BeforeShowContextMenuEventArgs e) { switch (e.HitType) { case HitTestTypeEnum.RowHeader: { // 如果是行标题,直接用自定义菜单代替 e.ContextMenu = Proj.GridContextMenu["选择区域右键菜单"]; break; } case HitTestTypeEnum.ColumnHeader: { // 这里可以单独地添加一个或多个自定义菜单 if (m_haveAddColumnMenu == false) //如果没有添加过菜单就添加,添加过了就不再重复添加了 { SmCommandLink lnk = new SmCommandLink(); lnk.Name = "lnkTestMenu"; // 命令菜单上显示的文本 lnk.Text = "插入右键菜单"; // 是否显示分隔符 lnk.Delimiter = true; // 鼠标移动到此菜单上时会提示出来的信息 lnk.ToolTipText = "这是插入右键菜单的提示信息"; SmCommand cmd = new SmCommand(); cmd.Name = "cmdTestMenu"; cmd.Text = "插入右键菜单"; cmd.ToolTipText = "命令中设置的ToolTipText"; // 设置命令的图标 cmd.Image = Sys.GetImage("accept_16x16.png", Path.Combine(Proj.ApplicationPath, "Images")); // 绑定命令的单击事件 cmd.Click += UserCommand_Click; // 将命令引用到菜单链接里面 lnk.Command = cmd; // 将菜单链接添加到系统默认菜单里面 e.ContextMenu.CommandLinks.Add(lnk); m_haveAddColumnMenu = true; } break; } default: { // 如果是其他部位的右键菜单,一律禁用 e.Cancel = true; break; } } } private void UserCommand_Click(System.Object sender, C1.Win.C1Command.ClickEventArgs e) { // 获得对命令的引用 SmCommand cmd = (SmCommand)sender; // 获得对SmCommandLink的引用 sanMuSoft.CS.WinForm.Controls.SmCommandLink lnk = (sanMuSoft.CS.WinForm.Controls.SmCommandLink)e.CallerLink; MessageBox.Show(string.Format("当前菜单命令的文本为:{0},当前命令的名称为:{1}", lnk.Text, cmd.Name)); } |