Определить, когда SplitContainer свернул изменения - PullRequest
4 голосов
/ 04 января 2012

У меня есть SplitContainer. Я хочу поймать события свертывания и расширения Panel2.

Есть идеи, как это сделать?

Ответы [ 4 ]

6 голосов
/ 01 августа 2012

Опубликовать это для других, которые могут искать тот же ответ, что и я.

К сожалению, SplitContainer не предлагает никаких прямых событий для свернутых событий. Что я нашел полезным, так это отслеживать события SizeChanged и / или ClientSizeChanged панели OPPOSITE для того, что вы свернули.

То есть, если я заинтересован в мониторинге крахов Panel2, я бы подписался на события ClientSizeChanged для Panel1.

На практике я бы рекомендовал отслеживать ClientSizeChanged для обеих панелей SplitContainer, чтобы гарантировать, что вы не пропустите ни инициализацию, ни прямые движения сплиттера.

В приведенном ниже примере у меня есть кнопка-переключатель (btnToggle), которой я хочу, чтобы состояние «Проверено» соответствовало видимости Panel2 в SplitContainer:

private void splitContainer_Panel2_ClientSizeChanged(object sender, EventArgs e)
{
        btnToggle.Checked = !splitContainer.Panel2Collapsed;
}

private void splitContainer_Panel1_ClientSizeChanged(object sender, EventArgs e)
{
        btnToggle.Checked = !splitContainer.Panel2Collapsed;
}
1 голос
/ 28 июня 2015

Во внутренней реализации, когда панель в SplitContainer свернута, свойство Visible имеет значение false и наоборот. Поэтому возможно обнаружить изменения, когда панель свернута, обработав событие VisibleChanged требуемой панели.

Проблема в том, что класс SplitterPanel не предоставляет этого события. Однако, поскольку он наследует класс Panel, который предоставляет это событие, вы можете привести к Panel и обработать событие оттуда, как показано в примере кода ниже.

private void Initialize()
{
    split = new SplitContainer();
    ((Panel)split.Panel1).VisibleChanged += splitPanel1_Collapsed;
}

private void splitPanel1_Collapsed(object sender, EventArgs e)
{
    var panel = (SplitterPanel)sender;
    var panelCollapsed = !panel.Visible;
}
1 голос
/ 15 декабря 2014
splitContainer.Panel1.VisibleChanged += (s, e) => { bool isPanel1Collapsed = splitContainer.Panel1Collapsed; };
1 голос
/ 04 января 2012

Событие точно не для этого, но это потому, что вы должны знать, когда оно сворачивается, когда код запускается:

splitContainer1.Panel1Collapsed = true;
// do your stuff

В противном случае вы можете наблюдать за SplitterMoved или SplitterMoving событий в элементе управления SplitContainer.

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