【问题标题】:How to customize toolstrip button highlight color on mouse over如何在鼠标悬停时自定义工具条按钮突出显示颜色
【发布时间】:2015-03-20 13:55:42
【问题描述】:

我在 C# winform 应用程序中使用ToolStrip
当我将鼠标移到一个按钮上时,它会突出显示(透明的蓝色),我想更改此颜色

我尝试使用自定义渲染器类

 toolStrip1.Renderer = new MyRenderer();
 ....
 class MyRenderer : ToolStripProfessionalRenderer
 {
 }

但是,我不知道应该重写哪个方法来更改该颜色。

【问题讨论】:

    标签: c# winforms customization toolstripbutton


    【解决方案1】:

    其实并没有内置的方式(或者至少我不知道)。

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

    【讨论】:

      【解决方案2】:

      您也可以通过自定义实现ProfessionalColorTable 并将其传递给ToolStripProfessionalRenderer's constructor 来实现。然后,您可以覆盖颜色表中的许多属性。

      控制“悬停”效果的是名称中带有“Selected”的那些,例如“ButtonSelectedGradientBegin”。

      您可以通过覆盖各种属性并返回粗体、明显的颜色来发现它们的效果,这样您就可以轻松查看它们的使用位置。

      【讨论】:

        【解决方案3】:

        又快又脏

        使用标签而不是按钮。您可以设置工具条标签的图像、背景图像和文本。然后,设置您的点击事件。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-08-06
          • 1970-01-01
          • 2014-07-26
          • 2017-11-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多