我在制作自定义控件方面还很陌生。我试图创建一个自定义按钮,但是无法在属性中向我的按钮添加背景图像或图像。我不知道为什么我已对此进行搜索,但现在找不到解决方案要问您。
这里是我的代码:
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?
但仍然无法正常工作。你能帮我么 ?我想学习如何以正确的方式设计自定义按钮。
您只需要向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);
}