2013-04-03 4 views
0

У меня есть контейнер сплит, который мне нужно показать и спрятать.Что случилось с этим кодом на C#?

Я попытался «проводку» раскол контейнера к кнопке, используя следующий код:

if (toolStripButton2.Checked == false) 
{ 
    toolStripButton2.Checked = true; 
    this.WindowState = FormWindowState.Maximized; 
    splitContainer1.Panel2Collapsed = false; 
    splitContainer1.Panel2.Show();     
} 
if (toolStripButton2.Checked == true) 
{ 
    toolStripButton2.Checked = false; 
    splitContainer1.Panel2Collapsed = true; 
    splitContainer1.Panel2.Hide();   
} 

Но это не похоже на работу. Я не вижу никаких проблем с кодом. Может быть, я что-то пропускаю?

Любые идеи?

--EDIT--

Для того, чтобы получить содержимое panel2 правильно отобразить, мне нужно, чтобы максимизировать форму.

+3

«Но это не работает». Можете ли вы рассказать об этом больше и как судить, работает ли это? – David

+0

Ну, я запустил отладчик и попробовал нажать кнопку, а панель с разделенным контейнером 2 не появилась. – 2013-04-03 12:43:52

+0

+1 для Дэвида. И добавьте 'else' перед вашим вторым' if'. – ybo

ответ

8

Похоже, что у вас есть логическая ошибка в коде. Если состояние Checked равно False, вы затем устанавливаете его на True, что означает, что ваш второй оператор if будет правдой, и код будет запущен в нем.

Попробуйте использовать else заявление вместо:

if (toolStripButton2.Checked == false) 
{ 
    toolStripButton2.Checked = true; 
    this.WindowState = FormWindowState.Maximized; 
    splitContainer1.Panel2Collapsed = false; 
    splitContainer1.Panel2.Show(); 
} 
else 
{ 
    toolStripButton2.Checked = false; 
    splitContainer1.Panel2Collapsed = true; 
    splitContainer1.Panel2.Hide(); 
} 
+1

+1 Очень хорошее объяснение. – Yuck

+0

Я пробовал это, но, к сожалению, он все еще не работает. – 2013-04-03 12:47:16

+0

@Toby Вы уверены, что ваша программа * действительно * выполняет эту часть? – Cemre

2

это не должно быть:

if (toolStripButton2.Checked == false) 
{ 
     toolStripButton2.Checked = true; 
     this.WindowState = FormWindowState.Maximized; 
     splitContainer1.Panel2Collapsed = false; 
     splitContainer1.Panel2.Show(); 

} 
else //toolStripButton2.Checked == true 
{ 
     toolStripButton2.Checked = false; 
     splitContainer1.Panel2Collapsed = true; 
     splitContainer1.Panel2.Hide(); 
} 
+0

По какой-то причине это тоже не сработало. – 2013-04-03 12:49:03

5

Где вы используете этот код? Вероятно, вы захотите поймать событие CheckChanged на кнопке. Провод обработчик в форме OnLoad:

toolStripButton2.CheckChanged += toolStripButton2_CheckChanged; 

и поместите следующий обработчик, который будет выполняться после проверки изменяется:

public void toolStripButton2_CheckChanged(object sender, EventArgs e) 
{ 
    if (toolStripButton2.Checked) 
    { 
     splitContainer1.Panel2Collapsed = true; 
     splitContainer1.Panel2.Hide(); 

    } 
    else 
    { 
     splitContainer1.Panel2Collapsed = false; 
     splitContainer1.Panel2.Show(); 
    } 
} 

Поскольку этот обработчик запускается после проверки изменена, дон Не нужно вручную устанавливать состояние проверки! Если вы установите состояние проверки на false, когда это true (или наоборот), вы бы эффективно UNDO изменение.

+1

Я думаю, хотя не указано, что кнопка не проверяет/снимает флажок при нажатии, и это то, что он хочет сделать. Если он проверяется, когда он нажимает на него, '.Checked = false', иначе' .Checked = true' Он также должен будет использовать событие Click. – kschieck

+0

@kschieck хорошая точка, но если я правильно напомню, что 'ToolStripButton' имеет свойство CheckOnClick = true;', которое ... ну, объясняет сам. –

+0

У меня есть этот комплект. – 2013-04-03 20:34:14