BeforeShowContextMenu顯示表的右鍵菜單之前觸發(fā)。我們可以在此事件中修改顯示的菜單。替換成我們自己自定義的菜單,以實現(xiàn)個性化定制。
e參數(shù) | 說明 |
ContextMenu | 此參數(shù)返回系統(tǒng)默認的右鍵菜單,我們既可以自己弄一個全新的菜單賦值給它,以替換系統(tǒng)原本的默認菜單,也可以在系統(tǒng)默認菜單上進行添加、刪除一些菜單,來實現(xiàn)右鍵菜單的個性化定制。 |
Cancel | 此參數(shù)可以禁用某些系統(tǒng)默認的右鍵菜單。 |
要想個性化定制表格的右鍵菜單的第一步,就是需要在“代碼管理”——“右鍵菜單”里面做一套自己的右鍵菜單。
第二步,到表事件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("選擇區(qū)域右鍵菜單") 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 '將菜單鏈接添加到系統(tǒng)默認菜單里面 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["選擇區(qū)域右鍵菜單"]; 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; // 將菜單鏈接添加到系統(tǒng)默認菜單里面 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)); } |