powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как перебрать все окна приложения?
10 сообщений из 10, страница 1 из 1
Как перебрать все окна приложения?
    #37055957
vlsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как перебрать все окна приложения?

Нужно посмотреть какие активные, какие не активные, какие равны null (не созданы).
...
Рейтинг: 0 / 0
Как перебрать все окна приложения?
    #37056015
Denis Gladkikh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vlsaf,

можно вопрос, а зачем? создавайте свои окна через какую-нибудь специальную фабрику и ведите подсчет, главное не напаритесь на memory leak в этом случае.
...
Рейтинг: 0 / 0
Как перебрать все окна приложения?
    #37058951
Руки-крюки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlsaf,

Код: plaintext
Application.Current.Windows

Это коллекция.
...
Рейтинг: 0 / 0
Как перебрать все окна приложения?
    #37059039
Denis Gladkikh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Руки-крюки,

но это не даст информацию о тех окнах, которые = null, потому интересна все-таки задача.
...
Рейтинг: 0 / 0
Как перебрать все окна приложения?
    #37059133
Руки-крюки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Gladkikh,

Можно через Win API. Названия функций не помню.
...
Рейтинг: 0 / 0
Как перебрать все окна приложения?
    #37059142
Руки-крюки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlsafкакие равны null (не созданы)
А, не дочитал. Ну прилепи какой нибудь костыль, типа:
Код: plaintext
public static bool IsCreated;
...
Рейтинг: 0 / 0
Как перебрать все окна приложения?
    #37059167
Руки-крюки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis GladkikhРуки-крюки,

но это не даст информацию о тех окнах, которые = null, потому интересна все-таки задача.
Если их нет в Application.Current.Windows то они = null
...
Рейтинг: 0 / 0
Как перебрать все окна приложения?
    #37059211
Denis Gladkikh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Руки-крюкиDenis GladkikhРуки-крюки,

но это не даст информацию о тех окнах, которые = null, потому интересна все-таки задача.
Если их нет в Application.Current.Windows то они = null


:) я думаю просто задача немного странная, узнать бы, что автор хотел сделать.
...
Рейтинг: 0 / 0
Как перебрать все окна приложения?
    #37060324
JohnSparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что это еще за окна, которые равны NULL?
Приложение должно быть в курсе, что автор хотел бы создать вот такое окно, но к настоящему моменту еще не создал?
Действительно, отчего возникла такая задача?
Как вариант, можно попробовать нечто вроде этого
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        /// <summary>
        /// словарь ссылок на окна приложения
        /// </summary>
        /// <key>Uid окна</key>
        /// <value>ссылка на окно</value>
        private Dictionary<string, Window> _appWindows;
        public Dictionary<string, Window> AppWindows
        {
            get { return _appWindows; }
        }
            
        /// <summary>
        /// регистрация нового окна
        /// </summary>
        /// <param name="window">окно</param>
        public void RegisterWindow(Window window)
        {
            if(window == null || string.IsNullOrEmpty(window.Uid))
                throw new ArgumentException("Object isn't exist or hasn't Uid", "window");

            Window w = null;
            if (_appWindows.TryGetValue(window.Uid, out w))
                _appWindows[window.Uid] = window;
            else
                _appWindows.Add(window.Uid, window);
        }

        /// <summary>
        /// регистрация факта закрытия окна
        /// </summary>
        /// <param name="uid">Uid окна</param>
        public void RegisterWindowClosed(string uid)
        {
            if (string.IsNullOrEmpty(uid))
                throw new ArgumentNullException();

            Window w = null;
            if (_appWindows.TryGetValue(uid, out w))
                _appWindows[uid] = null;
        }

        /// <summary>
        /// возврат ссылки на окно
        /// </summary>
        /// <param name="uid">Uid окна</param>
        public Window GetRegisteredWindow(string uid)
        {
            if (string.IsNullOrEmpty(uid))
                throw new ArgumentNullException();

            Window w = null;
            _appWindows.TryGetValue(uid, out w);

            return w;
        }
    }

    /// <summary>
    /// Класс окна, которое регистрирует себя по Uid
    /// все окна приложения должны наследоваться от него
    /// </summary>
    public class WindowEx : Window
    {
        /// <summary>
        /// конструктор по умолчанию
        /// </summary>
        public WindowEx()
            :base()
        {
            Loaded += new RoutedEventHandler(WindowEx_Loaded);
            Closed +=new EventHandler(WindowEx_Closed);
        }

        /// <summary>
        /// обработчик загрузки окна
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void  WindowEx_Closed(object sender, EventArgs e)
        {
            (App.Current as App).RegisterWindow(this);
        }

        /// <summary>
        /// обработчик закрытия окна
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void  WindowEx_Loaded(object sender, RoutedEventArgs e)
        {
            (App.Current as App).RegisterWindowClosed(this.Uid);
        }
    }
...
Рейтинг: 0 / 0
Как перебрать все окна приложения?
    #37061882
vlsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо за ответы.

Задача простая. Это многооконный интерфейс. Т.к. WPF не поддерживает MDI, то надо самрму решать вопросы, связанные с тем, какие окна я имею н аданный момент.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как перебрать все окна приложения?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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