我的 QuickMouseMenu






2.87/5 (5投票s)
我的 QuickMouseMenu
引言
我正在为一家公司开发一个集成系统,具有很多功能(CRM、发票、商店、保修管理、财务等)。因此,该应用程序有很多表单。
该应用程序的第一个版本有一个ToolStripMenu
,大约有8-10个根菜单和许多子菜单。当然,主要功能有快捷键,但不是每个人都喜欢快捷键。也许我们可以使用工具栏,但我不喜欢它们,因为您需要为每个菜单项制作工具栏项,这很麻烦……我想 :)
我在我的应用程序中使用 DevExpress 组件,它们有一个很棒的控件:RibbonControl(类似于新的 MS office 2007)。我认为它是一个非常有用的控件,带有应用程序菜单、状态栏等。(它对用户和开发人员都很有用,因为您可以将相同的“Item”(具有相同处理程序的相同对象)添加到菜单、应用程序菜单、状态栏等...)
但是...与快捷键和上下文菜单相同的问题...所以我决定制作我自己的“上下文菜单”,它可以与 DevExpress 功能区项目一起使用(并非全部,但可以与菜单一起使用)。对于“试点”项目,我为 2.0 MenuStrip 制作了它...
当然,您可以在没有 menustrip 的情况下使用它!!!!
使用代码
因为它是一个试点项目(一个试点测试项目),我没有为控件制作设计支持、错误处理等。真的,它不是一个控件,它是一个表单,但是如果你需要一个 UserControl 或一个组件,你可以简单地做到,带有设计支持...
QuickMenuItem(类 QuickMouseMenuItem)
它是一个简单的类来存储菜单项。
属性
private Image menuimage;
/// <summary>
/// menu image
///
public Image MenuImage
{
get { return menuimage; }
set { menuimage = value; }
}
private string description = "";
/// <summary>
/// menudescription to tooltip
///
public string Description
{
get { return description; }
set { description = value; }
}
private string caption = "";
/// <summary>
/// menucaption to tooltip
///
public string Caption
{
get { return caption; }
set { caption = value; }
}
private string key;
/// <summary>
/// the key to identify the menuitem
///
public string Key
{
get { return key; }
set { key = value; }
}
你如何使用它?!这非常简单:控件(类 QuickMouseMenuUC)有一个方法(带有一些重载)来添加根项
public QuickMouseMenuItem AddQuickMouseMenuItem(string key, Image img,
string Caption, string Description)
{
QuickMouseMenuItem newitem = new QuickMouseMenuItem(img, Caption,
Description);
newitem.Key = key;
lstRootItems.Add(newitem);
return newitem;
}
QuickMouseMenuItem 有两种方法可以添加子项
//
/// <summary>
/// Add child menuItem
/// </summary>
/// <param name="childitem" />
/// <returns>
public QuickMouseMenuItem AddChildQuickMouseMenuItem(
QuickMouseMenuItem childitem)
{
lstSubQuickMouseMenuItems.Add(childitem);
childitem.ParentQuickMouseMenuItem = this;
return childitem;
}
/// <summary>
/// Add child menu from Menustrip with Click event!!!
/// </summary>
/// </returns>
/// <param name="menustrip">
/// <returns>
public QuickMouseMenuItem CreateChildQuickMouseMenuItemFromMenuStrip(
System.Windows.Forms.ToolStripMenuItem menustrip)
{
QuickMouseMenuItem childitem = new QuickMouseMenuItem();
childitem.caption = menustrip.Text;
childitem.description = menustrip.ToolTipText;
if (menustrip.Image == null)
{
childitem.menuimage = resQMM.defaultIMAGE;
}
else
{
childitem.menuimage = menustrip.Image;
}
tsmenuitem = menustrip;
lstSubQuickMouseMenuItems.Add(childitem);
childitem.ParentQuickMouseMenuItem = this;
return childitem;
}
如果您想将其与 MenuStrip 一起使用,您需要使用第二种方法,如果您想将其与其他菜单、工具栏等一起使用,请编写您自己的方法!!!
而且使用它的唯一一件事就是,您需要将控件(Form)添加到您的应用程序中,例如
//create quickmenu
QMM.QuickMouseMenuUC quickMouseMenuUC1 = new QMM.QuickMouseMenuUC();
quickMouseMenuUC1.Size = new Size(200, 200);
//setttings
//hide when leave, if false close than back click on top level
quickMouseMenuUC1.HideOnMouseLeave = true;
//if have submenu than navigate
quickMouseMenuUC1.NavigateOnHover = true;
foreach (Control act in this.Controls)
{
//i add the handler to mdifrom mdiclient area
if (act is MdiClient)
{
// add to mouse down event
// do it for that controls you want...
act.MouseDown += new MouseEventHandler(
quickMouseMenuUC1.Parent_MouseDown);
break;
}
}
//QuickMenuItem click event...
quickMouseMenuUC1.QuickMenuItemClicked +=new MouseEventHandler(
quickMouseMenuUC1_QuickMenuItemClicked);
示例应用程序包含一个 MDI 应用程序。演示,其中包含一些演示菜单,当用户单击 mdiclient 区域时出现。一些演示菜单项
//add some test menu
quickMouseMenuUC1.AddQuickMouseMenuItem(respic.addd, "Add",
"Adding new value...");
quickMouseMenuUC1.AddQuickMouseMenuItem(respic.cancel, "Cancel",
"Cancel last operation...");
QMM.QuickMouseMenuItem file_menu =
quickMouseMenuUC1.AddQuickMouseMenuItem(respic.AppMenu32, "File",
"File menu");
//add some test menu from toolstripitem
file_menu.CreateChildQuickMouseMenuItemFromMenuStrip(newToolStripMenuItem);
file_menu.CreateChildQuickMouseMenuItemFromMenuStrip(closeToolStripMenuItem);
//some menu with sub menu...
quickMouseMenuUC1.AddQuickMouseMenuItem(respic.user, "Users", "Useres form");
QMM.QuickMouseMenuItem qmm_eamil = quickMouseMenuUC1.AddQuickMouseMenuItem(
respic.email2, "email");
QMM.QuickMouseMenuItem qmm_print = qmm_eamil.AddChildQuickMouseMenuItem(
new QMM.QuickMouseMenuItem(respic.print, "Print", ""));
qmm_eamil.AddChildQuickMouseMenuItem(new QMM.QuickMouseMenuItem(respic.sync,
"Sync", ""));
qmm_print.AddChildQuickMouseMenuItem(new QMM.QuickMouseMenuItem(respic.copy,
"Copy", ""));
qmm_print.AddChildQuickMouseMenuItem(new QMM.QuickMouseMenuItem(respic.addd,
"Add printer", "add printer"));
现在完成了!!!
所以它是一个简单的“控件”,在一个简单的演示中,如果您喜欢它,请下载并自定义它,无论您想要什么,以及您的应用程序需要什么!!!
我在我的应用程序中这样做,并且使用 devexpress 控件 (http://www.devexpress.com/Products/NET/WinForms/Index.xml)。
尽情享受并投票。
历史
Beta 1。