Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как перебрать все окна приложения? / 10 сообщений из 10, страница 1 из 1
13.01.2011, 09:49
    #37055957
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перебрать все окна приложения?
Как перебрать все окна приложения?

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

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

Код: plaintext
Application.Current.Windows

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

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

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

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

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


:) я думаю просто задача немного странная, узнать бы, что автор хотел сделать.
...
Рейтинг: 0 / 0
15.01.2011, 13:15
    #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
17.01.2011, 10:37
    #37061882
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перебрать все окна приложения?
Всем спасибо за ответы.

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


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