图片框和透明度的问题

时间:2015-12-28 05:57:47

标签: c#

我正在尝试开发一个扑克重播手,但我面临的问题并不是真正知道如何解决。使用以下方法:

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;

我得到了这个结果: enter image description here

所以使用代码:

//another picturebox    
var poscard = pictureBox1.PointToScreen(pictureBox1.Location);
poscard = pictureBox1.PointToClient(poscard);
pictureBox1.Parent = picTable;
pictureBox1.Location = poscard;

结果是: enter image description here

卡片被切断了...我尝试了所有我知道要解决但没有用的东西。任何想法如何使卡片出现在图像后面,也就是说,卡片的一部分被隐藏而没有“切割”?

感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

评论全部适用,但由于您的标题提到透明度,您应该意识到重叠控件严格无透明度

只有嵌套控件可以是透明的。

这似乎是你遇到的问题:

  • 看起来椭圆在表格中嵌套,因此它们的透明度有效。

  • 卡片和椭圆形**重叠**,因此它们之间的透明度不起作用

您可以使用region制作椭圆圆角矩形来解决方法..

请参阅here for an example,但在搜索“圆角矩形”时,您会发现很多其他代码示例。

因为你需要其中许多人最好做一个RoundedPictureBox课程!

通常最好的解决方案是不使用任何控件来显示(非矩形)图像,而是使用DrawImage图像。