2016-03-30 5 views
-1

У меня есть TabControl в приложении Winforms и на одной из страниц вкладок, у меня есть метка, которую я использую, чтобы информировать пользователя о недостатках данных на странице. Когда исправления устранены, я спрячу ярлык и сделаю видимым вместо другого ярлык, который указывает, что данные действительны.Как изменить видимость элементов управления на закладке

Проблема в том, что когда пользователь переключается на другую вкладку, а затем возвращается, обе эти метки видны. Кажется, что проблема заключается в том, что мне нужно перестроить различные элементы, когда пользователь выбирает вкладку, и в той точке, которую я делаю, изменение видимости элементов управления не имеет никакого эффекта, что, я думаю, связано с тем, что таб-страница еще не видна сама. Я попытался сделать это в выбранном событии TabControl и в событии Enter вкладки, но ни один из них не работал.

Я искал подходящее событие, которое появляется после того, как вкладка становится видимой, но перед тем, как она будет отображаться пользователю (или даже сразу после ее отображения), но не найдена.

Есть ли событие, которое было бы подходящим для настройки видимости элементов управления на вкладке? Или существует какой-то другой способ настройки видимости перед отображением закладки?

+1

Пожалуйста, пост простой код, чтобы воспроизвести проблему. –

+0

@RezaAghaei - ну, когда я проверил простой код, он этого не делал. Думаю, мне нужно изолировать причину в моем сложном приложении. –

+0

Первое преимущество создания простого кода для воспроизведения проблемы - для вас. Обычно это помогает вам находить проблему самостоятельно или перемещает вас в правильном направлении или по крайней мере удерживает вас от неправильных указаний. После этого, если проблема существует в простом коде, тогда код станет хорошей отправной точкой для других пользователей, которые помогут вам :) –

ответ

0

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

label1.Visible = IsValid(); 
label2.Visible = !label1.Visible; 

Но за this answer, label1.Visible не возвращает параметр видимости только на этикетке1, но самая низкая видимость метки1 и ее родителей. Поскольку вкладка не была видна, когда IsValid() истинно, label1.Visible устанавливается в значение true внутри, но все равно возвращает false. Так что label2.Visible также был установлен как true. После того, как показана вкладка, были отображены видимость, возвращаемая к их внутренним значениям и обе эти метки.

Решение было сохранить значение в переменной:

bool IsGood = IsValid(); 
label1.Visible = IsGood; 
label2.Visible = !IsGood; 
Смежные вопросы