【问题标题】:Bring picturebox to front将图片框放在前面
【发布时间】:2013-12-29 11:58:05
【问题描述】:

当我在一个循环中绘制几个重叠的图像时,比如一副扑克牌,我希望最后一张牌在最上面,以查看整张牌。现在它是第一张可见的卡片。我想知道是否有办法将第一张卡片放在前面或其他类似的地方?

        for (int i = 1; i < 10; i++)
        {
            cardGui = new CardGui(i);
            cardGui.Location = new Point(10 + (i * 10), 10);
            panel1.Controls.Add(cardGui);   
        }

【问题讨论】:

  • 您说:“我希望最后一张卡片在最上面”以及“我想知道是否有办法将第一张卡片放在前面”。这让我很困惑。你能改正吗?
  • 我正在尝试纠正它,但我不能!?应该是最后一张卡了,抱歉!
  • 你能把你想要的具体化。或者可以上传你现在得到的图片

标签: c#


【解决方案1】:

在你的循环之后试试这个代码:

    for (int i = 1; i < 10; i++)
    {
        cardGui = new CardGui(i);
        cardGui.Location = new Point(10 + (i * 10), 10);
        panel1.Controls.Add(cardGui);   
    }
    cardGui.BringToFront();

我希望最后一张卡片在上面

此代码完全符合您的要求

【讨论】:

  • 如果你在循环中使用这段代码,他想把第一张卡片放在前面,它会对所有卡片做同样的事情
  • 这是我要带到前台的最后一张卡片
  • 是的,确实如此,但是我没有得到很好的一排卡片,最后一张卡片覆盖了最后一张卡片
  • 如果你想让最后一张卡在上面,当然它会覆盖其他卡。您希望最后一张卡片先覆盖吗?
【解决方案2】:

如果您想将第一张卡片放在前面,您应该为卡片设置 2 个值,例如 cardGui1 和 cardGui2。第一个仅用于作为其他完成循环的前面。

试试这个:

const j =1;
cardGui2 = new cardGui2(j);
cardGui12.Location = new Point(10 + (j * 10), 10);
panel1.Controls.Add(cardGui2);
cardGui2.BringToFront();

for (int i = 1; i < 10; i++)
        {
            cardGui1 = new CardGui1(i);
            cardGui1.Location = new Point(10 + (i * 10), 10);
            panel1.Controls.Add(cardGui1);   
        }

更新:

我假设最后一张卡片索引是 10。试试这个:

for (int i = 1; i < 10; i++)
        {
            cardGui1 = new CardGui1(i);
            cardGui1.Location = new Point(10 + (i * 10), 10);
            panel1.Controls.Add(cardGui1);   
        }

const j =10;
cardGui2 = new cardGui2(j);
cardGui12.Location = new Point(10 + (j * 10), 10);
panel1.Controls.Add(cardGui2);
cardGui2.BringToFront();

【讨论】:

  • 谢谢,但这是我想放在前面的最后一张卡片,我也喜欢在没有循环的情况下添加卡片并将最后一张卡片放在前面
  • 我以为你想把第一张卡片放在前面,因为你说“我想知道是否有办法把第一张卡片放在前面”所以如果你想为最后一张卡片这样做,请参阅更新。
  • @Artiom 我说我假设那是 10 张卡片。他可以使用 i
【解决方案3】:

尝试BringToFront() 方法或使用父级Controls 集合的SetChildIndex 方法。

SetChildIndex:将集合中指定子控件的索引设置为指定索引。

BringToFront:将控件置于 z 顺序的前面。

示例代码:

for (int i = 1; i < 10; i++)
{
    cardGui = new CardGui(i);
    cardGui.Location = new Point(10 + (i * 10), 10);
    panel1.Controls.Add(cardGui);   
    panel1.Controls.SetChildIndex(cardGui, 10 - i); 
}

【讨论】:

  • 它会为每张牌做同样的事情,他只想对最后一张牌做同样的事情
  • @aliboy38:salam,我的建议是使用BringToFrontSetChildIndex;我的代码是一个示例。
  • 如果 Controls 集合中已有卡片,此代码将无法正常工作。
  • @Ria 萨拉姆。如果您想将其用作样本,那是非常好的样本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-10
  • 2020-07-07
  • 2013-03-23
  • 2015-01-06
  • 2013-10-21
相关资源
最近更新 更多