C # скрывает и показывает панель сверху сплитконтейнера - PullRequest
3 голосов
/ 29 сентября 2010

У меня есть экран, который разделен на несколько сплитконтейнеров.Один из них содержит прямоугольники, компоненты которых я сделал, эти «прямоугольники» представляют больничные койки.Я хотел дать пользователям возможность переключаться между этим «представлением пользовательских компонентов» и «представлением сетки данных».

Итак, я создал панель pnlPatients, которой я назначаю такой же размер, что и splitcontainer с пользователем.компоненты.Когда пользователь выбирает «Изменить вид», программа должна переключаться между двумя макетами.

Код: Попытка 1:

if (pnlPatients.Visible)
  pnlPatients.Hide();
else
{
  pnlPatients.Show();
  pnlPatients.BringToFront();
}

Попытка 2:

pnlPatients.Visible = !pnlPatients.Visible;
pnlPatients.Invalidate();

Странно то, что обе попытки работают так:

Пользователь сначала видит «представление компонента пользователя».Если бы он переключал вид, он бы правильно показывал панель поверх предыдущего вида.Если он снова переключится, панель будет правильно скрыта.Если он затем снова переключит вид, то панель не будет показана.ПРИМЕЧАНИЕ: во время отладки свойство visible панели правильно изменяется на TRUE или FALSE.Но по какой-то причине панель видна только в первый раз, когда она отображается в ИСТИНА.

У кого-нибудь есть идея?

С наилучшими пожеланиями

ПравитьЯ тоже пробовал это, но безуспешно:

pnlPatients.Visible = !pnlPatients.Visible;
if (pnlPatients.Visible)
{
  pnlPatients.BringToFront(); 
}
else
{
  pnlPatients.SendToBack();
}

Ответы [ 5 ]

5 голосов
/ 08 декабря 2011

На случай, если кто-то не захочет пройтись по всей ссылке Тони:

this.splitContainer.Panel2.Hide();
this.splitContainer.Panel2Collapsed = true;
3 голосов
/ 16 апреля 2012
    int control =  0;

    private void hideShowLogToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (control == 0)
        {
            control = 1;

            splitContainer1.Panel2Collapsed = false;

            splitContainer1.Panel1Collapsed = true;

        }
        else if (control == 1)
        {
            control = 0;

            splitContainer1.Panel2Collapsed = true;

            splitContainer1.Panel1Collapsed = false;
        }
    }
2 голосов
/ 29 сентября 2010

Посмотрите на это

0 голосов
/ 01 января 2015
 bool state;
    private void btn_Click(object sender, EventArgs e)
    {
        if (state)
        {
            splitContainer1.Panel1Collapsed = true;
            splitContainer1.Panel2Collapsed = false;
            state = false;

        }
        else
        {
            splitContainer1.Panel1Collapsed = false;
            splitContainer1.Panel2Collapsed = true;
            state = true;

        }

    }
0 голосов
/ 29 сентября 2010

Вместо того, чтобы аннулировать элемент управления Panel, аннулируйте форму Host, чтобы заставить ее перерисовывать также всех своих дочерних элементов, вызвав this.Invalidate(true);

...