2009-04-01 2 views
1

私のWindows FormsアプリケーションにはMenuStripがあり、メニュー項目の一部(ToolStripMenuItem)にはアイコン(ToolStripMenuItem.Imageプロパティを設定)があります。RenderModeが "システム"の場合、ToolStripMenuItemはチェックマークとイメージ(アイコン)を表示できません。

MenuStripRenderModeプロパティがToolStripRenderMode.Systemに設定されている場合CheckedまたはCheckOnClickプロパティがtrueで、メニュー項目がアイコンを持っている場合、チェックマークが表示されません。私はToolStripRenderMode.ProfessionalまたはToolStripRenderMode.RenderManagerModeMenuStrip.RenderModeプロパティを切り替えるときに

表示を行います。

残念ながら、私のアプリが必要であるため、これは問題です:

  1. マーキーモードでProgressBar、そうApplication.EnableVisualStyles()は、この作業を取得するために必要とされます。
  2. アプリには、フラットなビジュアルスタイルが必要です。これは、Application.EnableVisualStyles()への呼び出しを省略し、デフォルトのToolStripRenderMode.RenderManagerModeをMenuStripに残しておきます。しかし、私はマーキーProgressBarを得ることができません!
  3. RenderModeToolStripRenderMode.Systemに設定すると、ルックアンドフィールの要件は解決されますが、メニュー項目をアイコンでチェックする機能は廃止されます。

私の要件をすべて満たす方法はありますか?何か不足していますか?探してくれてありがとう。

答えて

3

わかりました。今私はいくつかの深刻なコードに取り組んでいる必要があります知っている。

とにかく答えはToolStripSystemRendererから継承するクラスを作成して自分自身のToolStripRendererを実装します。

独自のコードで項目を描画するメソッドをオーバーライドします。チェックされたアイテムを描くために私が探していたものがここにあります。 ToolStripMenuItemの画像がない場合はチェックを行います。

protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) 
{ 
    base.OnRenderItemCheck(e); 
    if (e.Item.Selected) 
    { 
     Rectangle rect = new Rectangle(3, 1, 20, 20); 
     Rectangle rect2 = new Rectangle(4, 2, 18, 18); 
     SolidBrush b = new SolidBrush(Color.FromArgb(49, 106, 197)); 
     SolidBrush b2 = new SolidBrush(Color.Orange); 

     e.Graphics.FillRectangle(b, rect); 
     e.Graphics.FillRectangle(b2, rect2); 
     e.Graphics.DrawImage(e.Image, new Point(5, 3)); 
    } 
    else 
    { 
     Rectangle rect = new Rectangle(3, 1, 20, 20); 
     Rectangle rect2 = new Rectangle(4, 2, 18, 18); 
     SolidBrush b = new SolidBrush(Color.FromArgb(49, 106, 197)); 
     SolidBrush b2 = new SolidBrush(Color.Orange); 

     e.Graphics.FillRectangle(b, rect); 
     e.Graphics.FillRectangle(b2, rect2); 
     e.Graphics.DrawImage(e.Image, new Point(5, 3)); 
    } 
} 
0

私もシンプルな代替渡って来た:

あなたは、単にいるContextMenuStripにあなたのメニューアイテムを配置し、DropDownButtonのドロップダウンプロパティに割り当てることができます。

これは、Paintメソッドを上書きしない人を助けてくれることを願っています。

関連する問題