如何在鼠标悬停时自定义工具条按钮突出显示颜色
How to customize toolstrip button highlight color on mouse over
我在 C# winform 应用程序中使用 ToolStrip
。
当我将鼠标移到按钮上时,它会突出显示(透明蓝色),我想更改此颜色
我尝试使用自定义渲染器 class
toolStrip1.Renderer = new MyRenderer();
....
class MyRenderer : ToolStripProfessionalRenderer
{
}
但是,我不知道应该覆盖哪个方法来更改该颜色。
实际上,没有内置的方式(或者至少我不知道)。
class MyRenderer : ToolStripProfessionalRenderer
{
protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
{
if (!e.Item.Selected)
{
base.OnRenderButtonBackground(e);
}
else
{
Rectangle rectangle = new Rectangle(0, 0, e.Item.Size.Width - 1, e.Item.Size.Height - 1);
e.Graphics.FillRectangle(Brushes.Green, rectangle);
e.Graphics.DrawRectangle(Pens.Olive, rectangle);
}
}
}
您也可以通过自定义实现 ProfessionalColorTable and passing that to ToolStripProfessionalRenderer's constructor 来做到这一点。然后,您可以覆盖颜色 table.
中的许多属性中的一些
控制'hover'效果的就是名字中带'Selected'的,比如'ButtonSelectedGradientBegin'.
您可以通过覆盖它们并返回粗体、明显的颜色来发现各种属性的效果,这样您就可以轻松地看到它们的使用位置。
快速而肮脏
使用标签代替按钮。您可以设置工具条标签的图像、背景图像和文本。然后,设置您的点击事件。
MouseEnter 工具条项目的事件:
private void tsi_MouseEnter(object sender, EventArgs e)
{
// Cast to allow reuse of method.
ToolStripItem tsi = (ToolStripItem)sender;
// Create semi-transparent picture.
Bitmap bm = new Bitmap(tsi.Width, tsi.Height);
for (int y = 0; y < tsi.Height; y++)
{
for (int x = 0; x < tsi.Width; x++)
bm.SetPixel(x, y, Color.FromArgb(150, Color.White));
}
// Set background.
tsi.BackgroundImage = bm;
}
MouseLeave 事件:
private void tsi_MouseLeave(object sender, EventArgs e)
{
(sender as ToolStripItem).BackgroundImage = null;
}
我在 C# winform 应用程序中使用 ToolStrip
。
当我将鼠标移到按钮上时,它会突出显示(透明蓝色),我想更改此颜色
我尝试使用自定义渲染器 class
toolStrip1.Renderer = new MyRenderer();
....
class MyRenderer : ToolStripProfessionalRenderer
{
}
但是,我不知道应该覆盖哪个方法来更改该颜色。
实际上,没有内置的方式(或者至少我不知道)。
class MyRenderer : ToolStripProfessionalRenderer
{
protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
{
if (!e.Item.Selected)
{
base.OnRenderButtonBackground(e);
}
else
{
Rectangle rectangle = new Rectangle(0, 0, e.Item.Size.Width - 1, e.Item.Size.Height - 1);
e.Graphics.FillRectangle(Brushes.Green, rectangle);
e.Graphics.DrawRectangle(Pens.Olive, rectangle);
}
}
}
您也可以通过自定义实现 ProfessionalColorTable and passing that to ToolStripProfessionalRenderer's constructor 来做到这一点。然后,您可以覆盖颜色 table.
中的许多属性中的一些控制'hover'效果的就是名字中带'Selected'的,比如'ButtonSelectedGradientBegin'.
您可以通过覆盖它们并返回粗体、明显的颜色来发现各种属性的效果,这样您就可以轻松地看到它们的使用位置。
快速而肮脏
使用标签代替按钮。您可以设置工具条标签的图像、背景图像和文本。然后,设置您的点击事件。
MouseEnter 工具条项目的事件:
private void tsi_MouseEnter(object sender, EventArgs e) { // Cast to allow reuse of method. ToolStripItem tsi = (ToolStripItem)sender; // Create semi-transparent picture. Bitmap bm = new Bitmap(tsi.Width, tsi.Height); for (int y = 0; y < tsi.Height; y++) { for (int x = 0; x < tsi.Width; x++) bm.SetPixel(x, y, Color.FromArgb(150, Color.White)); } // Set background. tsi.BackgroundImage = bm; }
MouseLeave 事件:
private void tsi_MouseLeave(object sender, EventArgs e) { (sender as ToolStripItem).BackgroundImage = null; }