2017-11-11 7 views
1

ToolStripMenuItemの上にカーソルを置くと、無効になっていても境界線が表示されます。これを削除するプロパティはありますか?ホバーでボーダーを防ぐ

私はHoverまたはBorderのようなプロパティを探しましたが、何も見当たりませんでした。

答えて

1

ToolStripProfessionalRendererは、デフォルトでMenuItemBorderプロパティを使用して境界を描画します。ProfessionalColorTableです。

有効なメニュー項目の境界線がちょうど見えるようにするには、カスタムProfessionalColorTableとカスタムToolStripProfessionalRendererを作成し、新しいMenuItemEnabledBorderはデフォルトの境界線の色を返す、ともColor.Transparentを返すようにMenuItemBorderをオーバーライド追加することができます。

カスタムレンダラでは、項目がハイライトされている場合は、OnRenderMenuItemBackgroundをオーバーライドし、MenuItemEnabledBorderを使用して境界線を描画するだけで十分です。

コード

その後
public class MyColorTable : ProfessionalColorTable 
{ 
    public override Color MenuItemBorder { get { return Color.Transparent; } } 
    public Color MenuItemEnabledBorder { get { return base.MenuItemBorder; } } 
} 

public class MyRenderer : ToolStripProfessionalRenderer 
{ 
    public MyRenderer() : base(new MyColorTable()) { } 
    protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) 
    { 
     base.OnRenderMenuItemBackground(e); 
     if (e.Item.Enabled && e.Item.Selected) 
     { 
      using (var pen = new Pen(((MyColorTable)ColorTable).MenuItemEnabledBorder)) 
      { 
       var r = new Rectangle(2, 0, e.Item.Width - 4, e.Item.Height - 1); 
       e.Graphics.DrawRectangle(pen, r); 
      } 
     } 
    } 
} 

レンダラを使用するには、それはあなたのツールストリップのレンダラとして設定するだけで十分です:あなたはToolStripProfessionalRendererクラスをオーバーライドすることができ

this.toolStrip1.Renderer = new MyRenderer(); 

enter image description here

+0

これは完全に機能します。そこにも素敵なGIF;) –

+0

あなたはようこそ;) –

1

とあなたの色を渡します(境界線に元のBackColorを渡したくない場合)を基本クラスのコンストラクタに渡します:

namespace WindowsFormsApplication11 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      menuStrip1.Renderer = new CustomColors(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 
    } 

    private class CustomColors : ToolStripProfessionalRenderer 
    { 
     public CustomColors() : base(new MyColors()) { } 
    } 

    private class MyColors : ProfessionalColorTable 
    { 
     public override Color MenuItemSelected 
     { 
      get { return Color.GreenYellow; } 
     } 
     public override Color MenuItemSelectedGradientBegin 
     { 
      get { return Color.DarkBlue; } 
     } 
     public override Color MenuItemSelectedGradientEnd 
     { 
      get { return Color.Yellow; } 
     } 
    } 
} 
関連する問題