Есть ли способ установить Z-порядок элементов управления на панели, чтобы они всегда были сверху при добавлении нового элемента управления? - PullRequest
0 голосов
/ 14 января 2019

Есть ли способ установить Z-порядок элементов управления на панели, чтобы они всегда были сверху при добавлении нового элемента управления? Я создаю карточную игру, и у меня есть панель с изображениями карт (новая коробка для каждой карты). При добавлении нового изображения оно автоматически переходит на заднюю часть панели. Есть ли способ, чтобы он всегда был сверху? Я пробовал SetChildIndex, но имя каждой картинки будет таким же, как я использую код. Любая помощь приветствуется. Спасибо

private void DealPlayerCard(int cardNum)
{
    string Card = Classes.Deck.GetCurrentCard();
    PictureBox pb = new PictureBox() { Width = 172, Height = 240, SizeMode = PictureBoxSizeMode.StretchImage };
    pb.ImageLocation = @"Cards\" + Card + ".png";
    int order = 0;

    switch (cardNum)
    {
        case 1:
            pb.Location = new Point(0, 0);
            order = 5;
            break;
        case 2:
            pb.Location = new Point(60, 0);
            order = 4;
            break;
        case 3:
            pb.Location = new Point(120, 0);
            order = 3;
            break;
        case 4:
            pb.Location = new Point(180, 0);
            order = 2;
            break;
        case 5:
            pb.Location = new Point(240, 0);
            order = 1;
            break;
    }

    AddPlayerCard(pb, order);
}

public void AddPlayerCard(PictureBox pb, int order)
{
    pnlPlayer.Controls.Add(pb);
    pnlPlayer.Controls.SetChildIndex(pb, order);
}

EDIT

Используя идею Синатра, я теперь использовал свойство элемента управления .Tag, чтобы присвоить номер z-порядка каждому из элементов управления, а затем всякий раз, когда я добавляю элемент управления, - просто перебираю каждый элемент управления и устанавливаю z-order = .Tag. свойство

private void DealPlayerCard(int cardNum)
{
    string Card = Classes.Deck.GetCurrentCardPicture();
    PictureBox pb = new PictureBox() { Width = 172, Height = 240, SizeMode = PictureBoxSizeMode.StretchImage };
    pb.ImageLocation = @"Cards\" + Card + ".png";

    switch (cardNum)
    {
        case 1:
            pb.Location = new Point(0, 0);
            pb.Tag = 5;
            break;
        case 2:
            pb.Location = new Point(60, 0);
            pb.Tag = 4;
            break;
        case 3:
            pb.Location = new Point(120, 0);
            pb.Tag = 3;
            break;
        case 4:
            pb.Location = new Point(180, 0);
            pb.Tag = 2;
            break;
        case 5:
            pb.Location = new Point(240, 0);
            pb.Tag = 1;
            break;
    }

    AddPlayerCard(pb);
    AddToHand("Player");
}

public void AddPlayerCard(PictureBox pb)
{
    pnlPlayer.Controls.Add(pb);
    foreach (Control Control in pnlPlayer.Controls)
    {
        pnlPlayer.Controls.SetChildIndex(Control, Int32.Parse(Control.Tag.ToString()));
    } 
}

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Вы можете использовать метод BringToFront(), доступный для каждого элемента управления Winform:

controlName.BringToFront();

Это приводит элемент управления controlName к вершине z-порядка, заставляя его иметь z-порядок 0.

0 голосов
/ 14 января 2019

Вы можете SetChildIndex(System.Windows.Forms.Control child, int newIndex) установить z-порядок.
Элемент управления с newIndex, установленным на 0, находится в верхней части z-порядка. Органы управления с более высоким newIndex будут расположены ближе к низу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...