如何在Winforms中向自定义按钮添加图像或背景图像?

时间:2020-02-22 12:51:07

标签: c# winforms

我在制作自定义控件方面还很陌生。 我试图创建一个自定义按钮,但无法在属性中将背景图像或图像添加到我的按钮。我不知道为什么我对此进行了搜索,但现在找不到解决方案要问您。

这是我的代码:

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    namespace exampleApp.GUI
    {
     class ThemedButton : Button
     {
      public ThemedButton()
      {           
          BackColor = buttonDefaultBackColor;
          FlatStyle = FlatStyle.Flat;
          ForeColor = buttonDefaultForeColor;
          Padding = new Padding(5, 2, 5, 2);            
      }
      protected override void OnPaint(PaintEventArgs args)
      {
          args.Graphics.FillRectangle(new SolidBrush(BackColor), 0, 0, this.Width, this.Height);
          TextFormatFlags flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter;
          TextRenderer.DrawText(args.Graphics, Text, Font, new Point(Width + 3, this.Height / 2), ForeColor, flags);
      }
      protected override void OnMouseEnter(EventArgs e)
      {
          base.OnMouseEnter(e);
          BackColor = buttonMouseEnterColor;
          ForeColor = buttonMouseEnterForeColor;
      }
      protected override void OnMouseLeave(EventArgs e)
      {
          base.OnMouseLeave(e);
          BackColor = buttonDefaultBackColor;
          ForeColor = buttonDefaultForeColor;
      }
      protected override void OnMouseDown(MouseEventArgs e)
      {
          base.OnMouseDown(e);
          BackColor = buttuonMouseDownBackColor;
          ForeColor = buttonMouseEnterForeColor;
      }
      protected override void OnMouseUp(MouseEventArgs e)
      {
          base.OnMouseUp(e);
          BackColor = Color.FromArgb(250, 133, 7);
          ForeColor = buttonMouseEnterForeColor;
      }
      //Color Settings
      private Color buttonDefaultBackColor = Color.FromArgb(245, 153, 17);
      private Color buttonDefaultForeColor = Color.Black;
      private Color buttonMouseEnterColor = Color.FromArgb(250, 133, 7);
      private Color buttonMouseEnterForeColor = Color.White;
      private Color buttuonMouseDownBackColor = Color.FromArgb(250, 84, 7);
     }
    }

我尝试了以下解决方案:Custom WinForms button does not change image?

但仍然无效。你能帮我么 ?我想学习如何以正确的方式设计自定义按钮。

2 个答案:

答案 0 :(得分:0)

您只需要向OnPanit函数添加2行即可。如果要使其更通用,请创建一个filePath属性,然后在Image.FromFile(filePath)函数中将其传递给它。 告诉我是否可以帮助您?

   protected override void OnPaint(PaintEventArgs args)
        {
             args.Graphics.FillRectangle(new SolidBrush(BackColor), 0, 0, this.Width, this.Height);
            TextFormatFlags flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter;
            TextRenderer.DrawText(args.Graphics, Text, Font, new Point(Width + 3, this.Height / 2), ForeColor, flags);
            this.Image =Image.FromFile(@"C:\\Users\\Orbus\\Documents\\WorkSpace\VisualBasic6\\PCustomer\\Image\\Search.jpg");
            base.OnPaint(args);
        }

答案 1 :(得分:0)

“您可以在任何图像上绘制:args.Graphics.FillRectangle(new SolidBrush(BackColor),0,0,this.Width,this.Height);”这就是使用TaW的答案

相关问题