sar*_*ake 2 c# fonts .net-3.5 winforms
我的表单上有一个菜单,定义如下:
private System.Windows.Forms.MainMenu mainMenu1;
//Then
private void InitializeComponent()
{
this.mainMenu1 = new System.Windows.Forms.MainMenu(this.components);
this.Menu = this.mainMenu1;
}
Run Code Online (Sandbox Code Playgroud)
我为整个表单设置了字体,但菜单项仍然忽略它.如何使菜单项的字体更大?我找不到Menu或MenuItem的Font属性....
如果您正在使用,则无法直接执行此操作MainMenu.你应该使用一个MenuStrip代替.
如果你绝对必须使用MainMenu,您必须设置OwnerDraw的属性MenuItem来true并覆盖/实施DrawItem和MeasureItem事件,以便您可以手动绘制它.
这是一个非常基本的自定义菜单项类; 它绝不是完整的或功能齐全的,但它应该让你开始:
using System.Windows.Forms;
using System.Drawing;
class CustomMenuItem : MenuItem
{
private Font _font;
public Font Font
{
get
{
return _font;
}
set
{
_font = value;
}
}
public CustomMenuItem()
{
this.OwnerDraw = true;
this.Font = SystemFonts.DefaultFont;
}
public CustomMenuItem(string text)
: this()
{
this.Text = text;
}
// ... Add other constructor overrides as needed
protected override void OnMeasureItem(MeasureItemEventArgs e)
{
// I would've used a Graphics.FromHwnd(this.Handle) here instead,
// but for some reason I always get an OutOfMemoryException,
// so I've fallen back to TextRenderer
var size = TextRenderer.MeasureText(this.Text, this.Font);
e.ItemWidth = (int)size.Width;
e.ItemHeight = (int)size.Height;
}
protected override void OnDrawItem(DrawItemEventArgs e)
{
e.DrawBackground();
e.Graphics.DrawString(this.Text, this.Font, Brushes.Blue, e.Bounds);
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个3深的测试用法:
MainMenu mainMenu = new MainMenu();
MenuItem menuFile = new CustomMenuItem("File");
MenuItem menuOpen = new CustomMenuItem("Open");
MenuItem menuNew = new CustomMenuItem("New");
public MenuTestForm()
{
InitializeComponent();
this.Menu = mainMenu;
mainMenu.MenuItems.Add(menuFile);
menuFile.MenuItems.Add(menuOpen);
menuOpen.MenuItems.Add(menuNew);
}
Run Code Online (Sandbox Code Playgroud)
并输出:

| 归档时间: |
|
| 查看次数: |
3163 次 |
| 最近记录: |