Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
 Аватар для JAGUAR XS
0 / 0 / 1
Регистрация: 13.11.2020
Сообщений: 92

Приложение WPF. При запуске первое окно два раза запускается

28.09.2024, 02:30. Показов 927. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код: C#
C#
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
using System.Configuration;
using System.Data;
using System.Windows;
 
namespace NameApp
{
    public partial class App : Application
    {
        
       protected override void OnStartup(StartupEventArgs e)
       {
            base.OnStartup(e);
 
            IndentificationWindow indentificationWindow = new IndentificationWindow();
 
            indentificationWindow.Closed += (s, args) =>
            {
                if (indentificationWindow.IsAuthenticated)
                {
                    MainWindow mainWindow = new MainWindow();
                    mainWindow.Show();
                }
                else
                {
                    Application.Current.Shutdown();
                }
            };
            indentificationWindow.Show();
        }
    }
 
}
Вот код app.xaml
XML
1
2
3
4
5
6
7
8
9
<Application x:Class="NameApp.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:NameApp"
             StartupUri="/IndentificationWindow.xaml">
    <Application.Resources>
         
    </Application.Resources>
</Application>
В чем причина двойного открытия окон?
В других классах оно не запускается повторно.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.09.2024, 02:30
Ответы с готовыми решениями:

WPF приложение зависает при запуске
После компиляции какой либо программы в vs 2015 она не запускается, а просто висит в процессах. Что делать?

StringGrid: при запуске заголовок выводится два раза
При запуске программы заголовок StringGrid выводится два раза: в нулевой строке (Где и должен быть) и в первой. После нажатия Esc второй...

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

14
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3384 / 2704 / 573
Регистрация: 04.09.2018
Сообщений: 8,516
Записей в блоге: 3
28.09.2024, 11:26
JAGUAR XS,
Убери строку StartupUri="/IndentificationWindow.xaml" из App.xaml.
0
 Аватар для JAGUAR XS
0 / 0 / 1
Регистрация: 13.11.2020
Сообщений: 92
28.09.2024, 12:14  [ТС]
убрал. теперь нет последовательности. просто первое окно, но нет второго
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,037
Записей в блоге: 2
28.09.2024, 13:23
Цитата Сообщение от JAGUAR XS Посмотреть сообщение
просто первое окно, но нет второго
В данном случае не столь важно, но при отсуствии StartupUri или Startup в XAML, XAML вовсе не будет инициализироваться и, например, вы не сможете получить ресурсы приложения.

Причина же вашей ошибки в использовании режима закрытия приложения по умолчанию.
Поэтому после закрытия IndentificationWindow приложение закрывается.
XML
1
2
3
4
5
6
7
8
9
<Application x:Class="NameApp.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:NameApp"
             Startup="OnStartup">
    <Application.Resources>
         
    </Application.Resources>
</Application>
C#
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
        private void OnStartup(object sender, StartupEventArgs e)
        {
            // Вывод режима закрытия приложения.
            // Скорее всего это будет "OnMainWindowClose"
            App app = (App)sender;
            Debug.WriteLine(app.ShutdownMode);
 
 
            // Первое созданное Окно автоматически становится основным окном приложения
            IndentificationWindow indentificationWindow = new IndentificationWindow();
 
            indentificationWindow.Closing += (s, args) =>
            {
                // Проверочный вывод основного Окна
                Debug.WriteLine(app.MainWindow.GetType());
 
                if (indentificationWindow.IsAuthenticated)
                {
                    MainWindow mainWindow = new MainWindow();
 
                    // Нужно сделать Окно Основным в приложении до закрытия indentificationWindow
                    app.MainWindow = mainWindow;
 
                    mainWindow.Show();
                }
                // Проверочный вывод основного Окна
                Debug.WriteLine(app.MainWindow.GetType());
 
                // Приложение и так завершится после закрытия indentificationWindow
                //else
                //{
                //    Application.Current.Shutdown();
                //}
            };
            indentificationWindow.Show();
        }
0
 Аватар для JAGUAR XS
0 / 0 / 1
Регистрация: 13.11.2020
Сообщений: 92
28.09.2024, 18:38  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Startup="OnStartup">
Startup="OnStartup"> тип application не поддерживает непосредственное содержимое

private void OnStartup(object sender, StartupEventArgs e)
Ошибка CS0115 "App.OnStartup(object, StartupEventArgs)": не найден метод, пригодный для переопределения.

Добавлено через 30 минут
C#
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
public partial class App : Application
{   
   protected override void OnStartup(object sender, StartupEventArgs e)
   {
        base.OnStartup(e);
        App app = (App)sender;
        //IndentificationWindow indentificationWindow = new IndentificationWindow();
        //indentificationWindow.Show();
        IndentificationWindow indentificationWindow = new IndentificationWindow();
 
        indentificationWindow.Closing += (s, args) =>
        {
            // Проверочный вывод основного Окна
            Debug.WriteLine(app.MainWindow.GetType());
 
            if (indentificationWindow.IsAuthenticated)
            {
                MainWindow mainWindow = new MainWindow();
                app.MainWindow = mainWindow;
 
                mainWindow.Show();
            }
 
        };
        indentificationWindow.Show();
 
    }
}
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,037
Записей в блоге: 2
28.09.2024, 21:49
Цитата Сообщение от JAGUAR XS Посмотреть сообщение
protected override void OnStartup(object sender, StartupEventArgs e)
Обратите внимание на сигнатуру метода в моём примере: private void OnStartup(object sender, StartupEventArgs e)

Полный код:
C#
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
public partial class App : Application
{   
        private void OnStartup(object sender, StartupEventArgs e)
        {
            // Вывод режима закрытия приложения.
            // Скорее всего это будет "OnMainWindowClose"
            App app = (App)sender;
            Debug.WriteLine(app.ShutdownMode);
 
 
            // Первое созданное Окно автоматически становится основным окном приложения
            IndentificationWindow indentificationWindow = new IndentificationWindow();
 
            indentificationWindow.Closing += (s, args) =>
            {
                // Проверочный вывод основного Окна
                Debug.WriteLine(app.MainWindow.GetType());
 
                if (indentificationWindow.IsAuthenticated)
                {
                    MainWindow mainWindow = new MainWindow();
 
                    // Нужно сделать Окно Основным в приложении до закрытия indentificationWindow
                    app.MainWindow = mainWindow;
 
                    mainWindow.Show();
                }
                // Проверочный вывод основного Окна
                Debug.WriteLine(app.MainWindow.GetType());
 
                // Приложение и так завершится после закрытия indentificationWindow
                //else
                //{
                //    Application.Current.Shutdown();
                //}
            };
            indentificationWindow.Show();
        }
}
Добавлено через 1 минуту
Цитата Сообщение от JAGUAR XS Посмотреть сообщение
Startup="OnStartup"> тип application не поддерживает непосредственное содержимое
Полный XAML дайте.
Ошибка явно не в этой строке.
0
 Аватар для JAGUAR XS
0 / 0 / 1
Регистрация: 13.11.2020
Сообщений: 92
28.09.2024, 23:03  [ТС]
Это XAML
XML
1
2
3
4
5
6
7
<Application x:Class="NameApp.App" 
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             xmlns:local="clr-namespace:NameApp">
    <Application.Resources>
    </Application.Resources>
</Application>
Код C# IndentificationWindow
C#
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
namespace NameApp
{
    public partial class IndentificationWindow : Window
    {
        public bool IsAuthenticated { get; private set; }
        public IndentificationWindow()
        {
            InitializeComponent();
        }
        private void TextBox_Login(object sender, TextChangedEventArgs e)
        {
 
        }
        private void TextBox_Password(object sender, TextChangedEventArgs e)
        {
 
        }
        private void Button_Indentification(object sender, RoutedEventArgs e)
        {
            string username = input_Login.Text; 
            string password = input_Password.Text;
 
            if (ValidateCredentials(username, password))
            {
                IsAuthenticated = true;
                
                MainWindow mainWindow = new MainWindow();
                mainWindow.Show();
 
                this.Close();
            }
            else
            {
                IsAuthenticated = false;
                MessageBox.Show("Неверный логин или пароль.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
                this.Close();
            }
        }
        private bool ValidateCredentials(string username, string password)
        {
            return username == "admin" && password == "Perfect";
        }
    }
}
Добавлено через 3 минуты
Я догадываюсь что где-то возможно не достаточно сигнатуры в каком-то методе
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,037
Записей в блоге: 2
28.09.2024, 23:26
Цитата Сообщение от JAGUAR XS Посмотреть сообщение
Это XAML
Повторите один в один:
XML
1
2
3
4
5
6
7
8
9
<Application x:Class="NameApp.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:NameApp"
             Startup="OnStartup">
    <Application.Resources>
         
    </Application.Resources>
</Application>
Добавлено через 25 секунд
C#
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
public partial class App : Application
{   
        private void OnStartup(object sender, StartupEventArgs e)
        {
            // Вывод режима закрытия приложения.
            // Скорее всего это будет "OnMainWindowClose"
            App app = (App)sender;
            Debug.WriteLine(app.ShutdownMode);
 
 
            // Первое созданное Окно автоматически становится основным окном приложения
            IndentificationWindow indentificationWindow = new IndentificationWindow();
 
            indentificationWindow.Closing += (s, args) =>
            {
                // Проверочный вывод основного Окна
                Debug.WriteLine(app.MainWindow.GetType());
 
                if (indentificationWindow.IsAuthenticated)
                {
                    MainWindow mainWindow = new MainWindow();
 
                    // Нужно сделать Окно Основным в приложении до закрытия indentificationWindow
                    app.MainWindow = mainWindow;
 
                    mainWindow.Show();
                }
                // Проверочный вывод основного Окна
                Debug.WriteLine(app.MainWindow.GetType());
 
                // Приложение и так завершится после закрытия indentificationWindow
                //else
                //{
                //    Application.Current.Shutdown();
                //}
            };
            indentificationWindow.Show();
        }
}
И напишите , если будет ошибка.
0
 Аватар для JAGUAR XS
0 / 0 / 1
Регистрация: 13.11.2020
Сообщений: 92
28.09.2024, 23:33  [ТС]
три ошибки:

Ошибка MC3061 тип элемента "System.Windows.Application" не имеет связанного TypeConverter для синтаксического анализа строки " Startup="OnStartup">

Ошибка XLS0502 Тип "Application" не поддерживает непосредственное содержимое.

Ошибка XDG0049 Не удается добавить содержимое к объекту типа "Application".
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,037
Записей в блоге: 2
29.09.2024, 00:27
Цитата Сообщение от JAGUAR XS Посмотреть сообщение
три ошибки:
Чё-то ерунда какая-то.
Сделайте архив Решения и скиньте сюда.
А архив не включайте папки bin, obj и начинающиеся с точки.
0
 Аватар для JAGUAR XS
0 / 0 / 1
Регистрация: 13.11.2020
Сообщений: 92
29.09.2024, 00:34  [ТС]
Могу вам отправить в ЛС?
Чтобы не позволять открытого доступа всем пользователям форума
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,037
Записей в блоге: 2
29.09.2024, 01:48
Цитата Сообщение от JAGUAR XS Посмотреть сообщение
Могу вам отправить в ЛС?
В ЛС нет отправки вложений.
Упростите решение до минимально достаточного для демонстрации проблемы.

Добавлено через 29 секунд
JAGUAR XS, по интерфейсу Форума:
 Комментарий модератора 
При обращении к другому пользователю указывайте его ник в тегах [NICK][/NICK] или цитируйте часть сообщения на которое отвечаете.
В противном случае ему не придёт уведомление о вашем обращении и вы можете не дождаться ответа на своё сообщение.

Для вставки ника: введите ник, выделите его и нажмите кнопку "Динамик" на панели редактора сообщений.
Или кликните по нику автора сообщения в панели слева от текста его сообщения.

Для вставки цитаты: выделите нужную цитату, должна появиться всплывающая кнопка "Цитировать", нажмите её.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,037
Записей в блоге: 2
29.09.2024, 14:51
JAGUAR XS, Пример реализации однооконного и мультиоконного Представления для одних и тех же Модели и ViewModel [WPF, Элд Хасп]
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
06.10.2024, 12:23
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Чё-то ерунда какая-то.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Application x:Class="NameApp.App"
если копировать один-в-один, то по namespace не найдет нужный класс. Думаю проблема была в этом.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,037
Записей в блоге: 2
06.10.2024, 12:29
Цитата Сообщение от Wolfdp Посмотреть сообщение
то по namespace не найдет нужный класс.
namespace, конечно, нужно копировать такие же, любо всюду менять на одни и теже.

NameApp взят из вашего кода:
Цитата Сообщение от JAGUAR XS Посмотреть сообщение
C#
1
2
namespace NameApp
{
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.10.2024, 12:29
Помогаю со студенческими работами здесь

Begininvoke срабатывает два раза при первом запуске программы
Здравствуйте, почему-то печать в textbook происходит два раза, но если поставить задержку перед началом считывания данных то этот баг...

При запуске программы запускается просто пустое окно
При запуске программы запускается просто пустое окно не знаю в чем причина задание такое: Разработайте тестовую вШ-программу на...

[WPF] Как встроить видеофайл в приложение и воспроизвести его при запуске?
Всем привет! как именно объявить, запустить видеофайл, чтобы он находился в самой программе после сборки, то есть, чтобы он...

При запуске ОС запускается командная строка, а затем всплывает окно браузера с сайтом
Здравствуйте, надеюсь на вашу помощь. В общем-то, ничего нового. При включении открывается командная строка, а затем включается окно...

Приложение запускается на эмуляторе, а при запуске на устройстве выдает ошибку
объясните пожалуйста,в чем проблема? Приложение которое я создал,прекрасно запускается на эмуляторе,а при запуске на устройстве выдает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru