这是此SO问题的后续问题:How do I make a collapsible UI region on the form?
我正在创建一个带有可扩展或可折叠的区域(面板)的winforms应用程序。
我使用VS2008 Image library中的展开/折叠位图作为按钮。我将这两个放入ImageList。
我希望按钮没有边框,所以我设置FlatStyle = Flat,FlatAppearance.BorderSize = 0.
在按钮的点击事件上,我有
private void button1_Click(object sender, EventArgs e)
{
if (splitContainer1.Panel1Collapsed == true)
{
splitContainer1.Panel1Collapsed = false;
button1.ImageIndex = 0;
this.toolTip1.SetToolTip(this.button1, "Collapse");
}
else
{
splitContainer1.Panel1Collapsed = true;
button1.ImageIndex = 1;
this.toolTip1.SetToolTip(this.button1, "Expand");
}
}
但是不尊重位图的透明度。我的理解是,位图的左上角(或左下角?)角使用的颜色将被视为透明,因此当显示位图时,具有相同颜色值的任何像素都将是透明的。但我没有得到那些结果。相反,我得到透明色,以显示其真实的颜色。
我找到了一种方法来避免这种情况,方法是为按钮提供OnPaint方法,并在调用MakeTransparent()之后手动绘制bmp,如下所示:
private void button1_Paint(object sender, PaintEventArgs e)
{
// This draws the image on the button, and makes the bmp
// background color as transparent. Why this isn't done
// automatically, I don't know.
Bitmap bmp = (Bitmap) imageList1.Images[button1.ImageIndex];
bmp.MakeTransparent();
int x = (button1.Width - bmp.Width) / 2;
int y = (button1.Height - bmp.Height) / 2;
e.Graphics.DrawImage(bmp, x, y);
}
但是有没有更简单的方法?