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

问题描述 投票:0回答:1

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

这里是我的代码:

    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?

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

c# winforms
1个回答
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);
        }
© www.soinside.com 2019 - 2024. All rights reserved.