我目前正在尝试将笔记放在员工形象之上。但是,音符背景被设置为图像背景所示的表单背景。 使用的图像类型是png。
//class music staff
public MusicStaff(int xLoc, int yLoc, int xSize, int ySize)
{
this.SetBounds(xLoc, yLoc, xSize, ySize);
this.Visible = true;
ResourceManager rm = Resources.ResourceManager;
Bitmap bmp = (Bitmap)rm.GetObject("Staff1");
this.BackgroundImage = bmp;
this.BackgroundImageLayout = ImageLayout.Stretch;
this.BackColor = Color.White;
//adding the background pic
panel4 = new MusicStaff(3, 62, 927, 150);
//adding a note
MusicNote p = new MusicNote(pitch, duration, shape, s);
p.SizeMode = PictureBoxSizeMode.StretchImage;
p.BackColor = Color.Transparent;
p.Size = new Size(50, 75);
p.Location = new Point(xCounter + starterX, NoteLocations.c0.mainPoint);
Bitmap myImage = (Bitmap)rm.GetObject(shape);
p.Image = myImage;
答案 0 :(得分:1)
你并没有真正覆盖图像。您正在用图像覆盖控件。
为了使用透明度,您的笔记控件需要在人员控件中嵌套!
因为它们不是,透明度显示其实际父的颜色,即表单。
设置p.Parent=panel4
并相应地调整位置,即使它们相对于工作人员..
这是winforms透明度的限制,它不支持重叠控件。 嵌套控件可以正常工作,但只能通过伪造透明部分来复制它们。
请注意,因此您将无法让这些音符相互重叠或被任何其他控件重叠。
经常放弃使用控件是更好的方法;相反,人们可以简单地绘制构成总数的所有部分..
因此,您可以在e.Graphics.DrawImage(noteImg, x, y)
事件中执行一系列panel4_Paint
。