powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как узнать значение свойства visible компонента, лежащего на панели с visible==false
6 сообщений из 6, страница 1 из 1
Как узнать значение свойства visible компонента, лежащего на панели с visible==false
    #38324246
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C#, VS2008
Имеется объект:
Код: c#
1.
Panel panel1 = new Panel()


В нём лежат несколько кнопок и других форм, что-то видимо, что-то не видимо.
После присвоения:
Код: c#
1.
panel1.visible = false;


все лежащие в нём компоненты имеют значение visible == false;
Получаю следующую ситуацию:
Если я напишу:
Код: c#
1.
2.
3.
4.
5.
//чему равно Button5.Visible, не известно
panel1.Visible = false;
Button5.Visible = true;
Console.WriteLine(button5.Visible.ToString());
panel1.Visible = true;

то выдаст false, но кнопка видна будет
Если так:
Код: c#
1.
2.
3.
4.
5.
//чему равно Button5.Visible, не известно
panel1.Visible = false;
Button5.Visible = false;
Console.WriteLine(button5.Visible.ToString());
panel1.Visible = true;


то выдаст false, и кнопка видна не будет.

Вопрос: как узнать значение видимости компонента в тот момент, пока панель невидима?
Вариант неверного ответа
Если кто-то хочет сказать: " а напиши вот так: "

Код: c#
1.
2.
3.
4.
//чему равно Button5.Visible, не известно
panel1.Visible = true;
bool ЗначениеВидимости = button5.Visible);
panel1.Visible = false;


то не годится, поскольку я не знаю, видима ли panel1.
"Ну тогда напиши вот так:"
Код: c#
1.
2.
3.
4.
5.
//чему равно Button5.Visible, не известно
bool temp = panel1.Visible;
panel1.Visible = true;
bool ЗначениеВидимости = button5.Visible);
panel1.Visible = temp;


Тоже не годится. Если панель panel1 в свою очередь также лежит на невидимой панели, как только её родительская панель отобразится, то после этого кода сама panel1 уже будет невидимой.
Поясню кодом:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
mainpanel.visible = true; //головная панелька, на ней лежат другие панели, в т.ч. panel1
panel1.Visible = true;  //делаем дочернюю панельку видимой.
mainpanel.visible = false; // а вот теперь mainpanel.visible == panel1.Visible == false, если запрашивать значение этого свойства
bool temp = panel1.Visible; //сохраняем false вместо true в переменную
panel1.Visible = true;    //отображаем панель
bool ЗначениеВидимости = button5.Visible //че-то там считываем, чего хотим);
panel1.Visible = temp; // т.к. temp == false, то записываем в panel1 значение visible = false
mainpanel.visible = true; //panel1 не отобразилась, по-прежднему скрыта.


...
Рейтинг: 0 / 0
Как узнать значение свойства visible компонента, лежащего на панели с visible==false
    #38324328
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland,

.. ну так создайте себе Dictionary, да и пишите/меняйте свойства - надежнее будет ...
...
Рейтинг: 0 / 0
Как узнать значение свойства visible компонента, лежащего на панели с visible==false
    #38324377
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland, http://stackoverflow.com/a/5980637 даже если это работает, путь это неверный... недостойный джедая...
...
Рейтинг: 0 / 0
Как узнать значение свойства visible компонента, лежащего на панели с visible==false
    #38325281
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserCharles Weyland, http://stackoverflow.com/a/5980637 даже если это работает, путь это неверный... недостойный джедая...

отлично!! Спасибо!)) работает. Правда, хз как, но работает.
Решение выношу на форум:
Код: c#
1.
2.
3.
4.
5.
6.
7.
public static bool WouldBeVisible(Control ctl)
{
    // Returns true if the control would be visible if container is visible
    MethodInfo mi = ctl.GetType().GetMethod("GetState", BindingFlags.Instance | BindingFlags.NonPublic);
    if (mi == null) return ctl.Visible;
    return (bool)(mi.Invoke(ctl, new object[] { 2 }));
}
...
Рейтинг: 0 / 0
Как узнать значение свойства visible компонента, лежащего на панели с visible==false
    #38325860
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по ходу, через раз этот код работает... поясните, пожалуйста, как у него получается что-то понять :)
...
Рейтинг: 0 / 0
Как узнать значение свойства visible компонента, лежащего на панели с visible==false
    #38325989
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland, да забейте... это рефлектором копать... Просто Вы не туда копаете... как мне катся...
YouTube Video
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как узнать значение свойства visible компонента, лежащего на панели с visible==false
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]