3

次のように定義されたフォームにメニューがあります。

private System.Windows.Forms.MainMenu mainMenu1;

//Then

private void InitializeComponent()
{
 this.mainMenu1 = new System.Windows.Forms.MainMenu(this.components);
 this.Menu = this.mainMenu1;
}

フォーム全体のフォントを設定しましたが、メニュー項目は依然としてそれを無視します。メニュー項目のフォントを大きくするにはどうすればよいですか? Menu または MenuItem の Font プロパティが見つかりません....

4

1 に答える 1

5

を使用している場合、直接行うことはできませんMainMenu。代わりにa を使用する必要がありますMenuStrip

絶対に を使用する必要がある場合は、 のプロパティをMainMenu設定し、およびイベントをオーバーライド/実装して、手動でペイントできるようにする必要があります。OwnerDrawMenuItemtrueDrawItemMeasureItem


これは非常に基本的なカスタム メニュー項目クラスです。決して完全または完全に機能するわけではありませんが、開始する必要があります。

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);
    }
}

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);
}

そして出力:

ここに画像の説明を入力

于 2012-10-01T22:14:18.970 に答える