私の問題は、ボタンにpngを含むピクチャボックスを配置したいということですが、WinFormsはそこで透明度をサポートしていないようです。1. はい、Parent を試しました 2. はい、Color.Transparent を試しました
私が行った最後の試みもうまくいきませんでした。多分あなたは私を助けることができます。ただし、これは私がこれまでに行った中で最も近い試みです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
namespace Parameter2
{
public class TransPicturebox : Control
{
public TransPicturebox()
{
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.SupportsTransparentBackColor | ControlStyles.UserPaint, true);
this.BackColor = Color.Transparent;
}
private Image _Image;
public Image Image
{
get
{
return _Image;
}
set
{
_Image = value;
}
}
private bool _autoscale = true;
public bool AutoScale
{
get
{
return _autoscale;
}
set
{
_autoscale = value;
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (_Image != null) //keep from crashing if there is no image
{
if (_autoscale)
{
//Auto Scale the image to fit in the text box
Rectangle rectangle = new Rectangle();
Size size = this.Image.Size;
float num = Math.Min((float)(((float)base.ClientRectangle.Width) / ((float)size.Width)), (float)(((float)base.ClientRectangle.Height) / ((float)size.Height)));
rectangle.Width = (int)(size.Width * num);
rectangle.Height = (int)(size.Height * num);
rectangle.X = (base.ClientRectangle.Width - rectangle.Width) / 2;
rectangle.Y = (base.ClientRectangle.Height - rectangle.Height) / 2;
e.Graphics.DrawImage(_Image, rectangle);
}
else
{
e.Graphics.DrawImage(_Image, new Point(0, 0));
}
}
}
}
}