Demo运行截图:
我们就结合【表单标签】区域来演示如何给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、实现菜单项的单击事件
-
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