📄 mymenu.cs.svn-base
字号:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace GuangMa
{
/// <summary>
/// MyMenu 的摘要说明。
/// </summary>
public class MyMenu:System.Windows.Forms.Panel
{
private ContextMenu contextMenu;
private int selectedIndex = 0;
private string Title;
public delegate void MenuSelectedEventHandler(object sender, MenuItem e);
public event MenuSelectedEventHandler MenuSelected;
public MyMenu(ContextMenu _Menu, string _Title)
{
contextMenu = _Menu;
Title = _Title;
if(contextMenu.MenuItems.Count > 0)
{
contextMenu.MenuItems[selectedIndex].Checked = true;
}
this.Size = new Size(240,214);
}
protected void OnMenuSelected(object sender, MenuItem e)
{
if (this.MenuSelected != null) this.MenuSelected(sender, e);
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint (e);
int i = 35;
DrawMenuTitle(e, Title);
foreach(MenuItem item in contextMenu.MenuItems)
{
if(item.Checked)
{
DrawMenuItem(e, item.Text, i, true);
}
else
{
DrawMenuItem(e, item.Text, i, false);
}
i += 25;
}
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown (e);
if(e.KeyCode.Equals(Keys.Down))
{
if(selectedIndex < contextMenu.MenuItems.Count-1)
{
selectedIndex ++;
}
else
{
selectedIndex = 0;
}
}
if(e.KeyCode.Equals(Keys.Up))
{
if(selectedIndex > 0)
{
selectedIndex --;
}
else
{
selectedIndex = contextMenu.MenuItems.Count - 1;
}
}
if(e.KeyCode.Equals(Keys.Down) || e.KeyCode.Equals(Keys.Up))
{
foreach(MenuItem item in contextMenu.MenuItems)
{
item.Checked = false;
}
contextMenu.MenuItems[selectedIndex].Checked = true;
this.Refresh();
}
if(e.KeyCode.Equals(Keys.Enter))
{
if(contextMenu.MenuItems[selectedIndex].MenuItems.Count > 0)
{
int count = contextMenu.MenuItems.Count;
}
else
{
this.MenuSelected(this, contextMenu.MenuItems[selectedIndex]);
}
}
}
//绘制菜单标题
private void DrawMenuTitle(PaintEventArgs e, string title)
{
Font font = new Font("宋体", 18, FontStyle.Bold);
SizeF size = e.Graphics.MeasureString(title, font);
e.Graphics.DrawString(title, font,new SolidBrush(Color.Blue),new RectangleF((240-size.ToSize().Width)/2, 0, size.ToSize().Width, size.ToSize().Height));
}
//绘制菜单项目
private void DrawMenuItem(PaintEventArgs e, string s, int top, bool showBG)
{
int left = 10; //绘制区域左边距离
int width = 220; //绘制区域的宽度
int height = 22; //绘制区域的高度
Color BackColor = Color.Blue; //选取项目的背景颜色
Color ForeColor = Color.Blue; //未选取项目文字颜色
Color SelectedForeColor = Color.White; //选取项目的文字颜色
Font font = new Font("宋体", 16, FontStyle.Bold);
SizeF size = e.Graphics.MeasureString(s, font);
if(showBG)
{
e.Graphics.FillRectangle(new SolidBrush(BackColor),new Rectangle(left, top, width, height));
e.Graphics.DrawString(s, font, new SolidBrush(SelectedForeColor),new RectangleF((240-size.ToSize().Width)/2, top, size.ToSize().Width, size.ToSize().Height));
}
else
{
e.Graphics.DrawString(s, font, new SolidBrush(ForeColor),new RectangleF((240-size.ToSize().Width)/2, top, size.ToSize().Width, size.ToSize().Height));
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -