我正在尝试开发一个扑克重播手,但我面临的问题并不是真正知道如何解决。使用以下方法:
public Replayer() //ctor
{
InitializeComponent();
pics = null;
iCounter = 0;
bShow = true;
var pos = picTable.PointToScreen(picTable.Location);
pos = picTable.PointToClient(pos);
picTable.Parent = picBackground;
picTable.Location = pos;
picTable.BackColor = Color.Transparent;
TenPlayerHoldem(); // for only test
}
private void TenPlayerHoldem() // only test
{
int iCounter = 10;
pics = new PictureBox[10];
for(int i = 0; i < iCounter; i++)
{
pics[i] = new PictureBox();
pics[i].Name = "pics" + i.ToString();
pics[i].Size = new Size(148, 74);
pics[i].Image = FreePokerReplayer.Properties.Resources.seatbold;
pics[i].SizeMode = PictureBoxSizeMode.StretchImage;
pics[i].BackColor = Color.Transparent;
pics[i].Visible = true;
pics[i].MouseClick += new MouseEventHandler(pics_Click);
picTable.Controls.Add(pics[i]);
}
pics[0].Location = new Point(379, 410);
var pos00 = pics[0].PointToScreen(pics[0].Location);
pos00 = pics[0].PointToClient(pos00);
pics[0].Parent = picTable;
pics[0].Location = pos00;
pics[1].Location = new Point(188, 377);
var pos01 = pics[1].PointToScreen(pics[1].Location);
pos01 = pics[1].PointToClient(pos01);
pics[1].Parent = picTable;
pics[1].Location = pos01;
pics[2].Location = new Point(56, 288);
var pos02 = pics[2].PointToScreen(pics[2].Location);
pos02 = pics[2].PointToClient(pos02);
pics[2].Parent = picTable;
pics[2].Location = pos02;
所以使用代码:
//another picturebox
var poscard = pictureBox1.PointToScreen(pictureBox1.Location);
poscard = pictureBox1.PointToClient(poscard);
pictureBox1.Parent = picTable;
pictureBox1.Location = poscard;
卡片被切断了...我尝试了所有我知道要解决但没有用的东西。任何想法如何使卡片出现在图像后面,也就是说,卡片的一部分被隐藏而没有“切割”?
感谢你的帮助。
答案 0 :(得分:0)
评论全部适用,但由于您的标题提到透明度,您应该意识到重叠控件严格无透明度。
只有嵌套控件可以是透明的。
这似乎是你遇到的问题:
看起来椭圆在表格中嵌套,因此它们的透明度有效。
但卡片和椭圆形**重叠**,因此它们之间的透明度不起作用。
您可以使用region
制作椭圆圆角矩形来解决方法..
请参阅here for an example,但在搜索“圆角矩形”时,您会发现很多其他代码示例。
因为你需要其中许多人最好做一个RoundedPictureBox
课程!
通常最好的解决方案是不使用任何控件来显示(非矩形)图像,而是使用DrawImage
图像。