Demo运行截图:

Spread设计器中,我们在不同区域点击鼠标右键,会显示不同的右键菜单,如果是要自己现实Spread中的右键菜单功能,我们可以借助HitTest()方法来判断当前点击的是什么区域,各个区域对应的名称请参考下面的截图:

我们就结合【表单标签】区域来演示如何给Spread的不同区域指定不同的右键菜单,我们要给【表单标签】区域添加一个右键菜单,菜单中包含【复制】、【剪切】、【粘贴】和【删除】功能。

1、首先需要使用到Spread的MouseUp事件,在该事件中来判断右键单击的是哪个区域

 
private void fpSpread1_MouseUp(object sender, MouseEventArgs e)

    {

        HitTestInformation hitInfo = fpSpread1.HitTest(e.X, e.Y);



        // 根据右键单击的位置来判断,是否应该显示TabStrip的右键菜单

        if (e.Button == System.Windows.Forms.MouseButtons.Right && hitInfo.Type == HitTestType.TabStrip)

        {

            if (hitInfo.TabStripInfo.Sheet != -1 && hitInfo.TabStripInfo.Sheet != fpSpread1.Sheets.Count)

            {

                fpSpread1.ActiveSheetIndex = hitInfo.TabStripInfo.Sheet;

                TabStripContextMenu.Show(fpSpread1, e.Location);

            }

        }

    }

复制代码

上面代码首先调用了fpSpread1.HitTest(e.X, e.Y)方法,然后通过 Type 属性来判断右键单击的区域。

2、实现菜单项的单击事件

  1.     
    private void TabStripContextMenu_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
    
        {
    
            switch (e.ClickedItem.Name)
    
            {
    
                case "copyMenuItem":
    
                    // 复制Sheet
    
                    copiedSheetView = CopySheet(fpSpread1.ActiveSheet);
    
                    SetContextMenuState();
    
                    break;
    
                case "cutMenuItem":
    
                    // 剪切Sheet
    
                    copiedSheetView = fpSpread1.ActiveSheet;
    
                    fpSpread1.Sheets.Remove(fpSpread1.ActiveSheet);
    
                    SetContextMenuState();
    
                    break;
    
                case "pasteMenuItem":
    
                    // 粘贴Sheet
    
                    PasteSheet();
    
                    break;
    
                case "deleteMenuItem":
    
                    // 删除Sheet
    
                    DeleteSheet();
    
                    SetContextMenuState();
    
                    break;
    
                default:
    
                    break;
    
            }
    
        }
    
    复制代码
    源码:VS2010 + .net4.0 + Spread .net 6.0.3505
Spread_ContextMenu.zip (15.35 K, 下载次数:26)