ToolStripMenuItem
の上にカーソルを置くと、無効になっていても境界線が表示されます。これを削除するプロパティはありますか?ホバーでボーダーを防ぐ
私はHover
またはBorder
のようなプロパティを探しましたが、何も見当たりませんでした。
ToolStripMenuItem
の上にカーソルを置くと、無効になっていても境界線が表示されます。これを削除するプロパティはありますか?ホバーでボーダーを防ぐ
私はHover
またはBorder
のようなプロパティを探しましたが、何も見当たりませんでした。
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();
とあなたの色を渡します(境界線に元の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; }
}
}
}
これは完全に機能します。そこにも素敵なGIF;) –
あなたはようこそ;) –