Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
4 / 4 / 1
Регистрация: 08.08.2014
Сообщений: 83
WPF

Как свернуть родительскую форму пока открыта вторая форма

11.11.2019, 11:07. Показов 2112. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане!
Подскажите, пожалуйста, как решить такую проблему!
Есть основная форма MainWindow, на основной форме есть кнопка по клику, на которой вызывается 2 форма ChildWindow, первая форма для второй является родителем.
Так вызываю вторую форму
C#
1
2
3
             ChildWindow сhildWindow= new ChildWindow ();              
             сhildWindow.Owner = this;
             сhildWindow.Show();
Во вторую форму пользователь вводит некоторые данные, например с файла .pdf и ему удобнее, чтобы документ, с которого он вводит был бы подложкой под второй формой. Но получается, что под второй формой остается первая форма. Как можно свернуть первую форму, а на экране оставить развернутой вторую форму. Пыталась прятать первую форму пока открыта вторая форма, но так совсем некрасиво.
Заранее спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.11.2019, 11:07
Ответы с готовыми решениями:

Первая форма недоступна, пока вторая открыта!
Здравствуйте! делаю прогу на делфи, есть главная форма список студентов и форма для добавление студента, проблема такая: как сделать так...

Свернуть родительскую форму и развернуть дочернюю
Как свернуть родительскую форму и после этого развернуть только дочернюю, т.е. чтобы показывалась только дочерняя форма

Необходимо приостановить выполнение кода первой формы, пока открыта вторая
необходимо приостановить выполнение кода первой формы, пока открыта вторая как организовать? Добавлено через 54 минуты и...

10
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16124 / 11248 / 2888
Регистрация: 21.04.2018
Сообщений: 33,081
Записей в блоге: 2
11.11.2019, 11:49
Tanyusha, совершенно не понял!
Вы хотите скрыть основное окно, но потом пишите что скрытие вам не нравится.
А что вы хотите собственно реализовать?
Если можно подробнее и с картинками.
0
4 / 4 / 1
Регистрация: 08.08.2014
Сообщений: 83
11.11.2019, 11:59  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Tanyusha, совершенно не понял!
Вы хотите скрыть основное окно, но потом пишите что скрытие вам не нравится.
А что вы хотите собственно реализовать?
Если можно подробнее и с картинками.
Пользователь хочет, чтобы под вторую форму подложкой можно было положить документ, например, *.pdf.
А получается, что под второй формой лежит подложкой первая форма. Если свернуть первую форму, то с ней сворачивается и вторая форма
0
WPF Разработчик
 Аватар для sttrox
463 / 167 / 42
Регистрация: 20.02.2018
Сообщений: 285
11.11.2019, 12:14
Tanyusha, абсолютно верно. Ваша 2ая форма стала зависима от 1ой после строки
C#
1
сhildWindow.Owner = this;
После того как пользователь нажмёт на кнопочку свернуть в 1ой форма, она 1ая форма, потянет за собой и 2ую.

Для того, что бы такого не происходило Вам необходимо либо отвязать, т.е. не использовать сhildWindow.Owner, либо сворачивать и разворачивать форму через код используя методы
C#
1
2
сhildWindow.Hide(); //прячет форму
сhildWindow.Show(); //возвращает форму
2
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16124 / 11248 / 2888
Регистрация: 21.04.2018
Сообщений: 33,081
Записей в блоге: 2
11.11.2019, 13:07
Tanyusha, решений много.
Но зависит от того как вы реализовываете приложение.
Вы создаёте нормальное MVVM?
Или делаете через костыли в CB окна.
0
4 / 4 / 1
Регистрация: 08.08.2014
Сообщений: 83
11.11.2019, 13:38  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Tanyusha, решений много.
Но зависит от того как вы реализовываете приложение.
Вы создаёте нормальное MVVM?
Или делаете через костыли в CB окна.
Что вы имеете ввиду?
Визуальное отображение отдельно. Процедуры, запросы отдельно.
Родитель назначен для второй формы, потому что из второй формы я обновляю некоторые значения в первой по мере их изменений во второй
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16124 / 11248 / 2888
Регистрация: 21.04.2018
Сообщений: 33,081
Записей в блоге: 2
11.11.2019, 14:12
Tanyusha, отдельно это как?
В CB окна есть что-нибудь для работы с данными?

По существу вам уже ответил sttrox.
Не надо устанавливать отношение родитель-ребенок между окнами.
А вот детали реализации зависит от деталей вашего решения.
Если делать всё правильно по канонам MVVM, то для управления окнами надо добавить интерфейс.
В разделе есть несколько тем где обсуждается как его реализовать и использовать.
0
WPF Разработчик
 Аватар для sttrox
463 / 167 / 42
Регистрация: 20.02.2018
Сообщений: 285
11.11.2019, 14:31
Элд Хасп, сомниваюсь что у нашего героя ТС, есть время и желание разбираться в MVVM. Полагаю там оно и лишним будет, очень простое приложение.

Tanyusha, Вам следует оставить присвоение владельца в том случае, если после закрытия 1ой формы надо закрыть и 2ую.
Если надо передать данные, то Вы можете написать класс с необходимыми свойствами, сохранить в 1ой форме, и при создании 2ой, передать через конструктор или свойство во 2ую. Данные будут меняться там и там, поскольку Ваш класс будет ссылочным типом(к примеру с int, так не сработает по тому что это тип значение).

Так же Вы можете сделать статическую переменную и обращаться к ней. Однако этого не рекомендую.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16124 / 11248 / 2888
Регистрация: 21.04.2018
Сообщений: 33,081
Записей в блоге: 2
11.11.2019, 16:58
Tanyusha, попробую описать в общем виде.

Для передачи данных между формами создаёте какой-то простой класс (название класса и свойств условны).
C#
1
2
3
4
5
6
public class DataClass
{
       public int Number {get; set;}
       public string Name {get; set}
       public DateTime TimeStamp {get; set;}
}
Во втором окне объявляете конструктор принимающий этот класс и записывающий его в своё поле
C#
1
2
3
4
private readonly DataClass data;
public ChildWindow(DataClass data)
      : this ()
       => this.data = data;
Создаёте в первом окне поля с экземпляром этого типа и экземпляром второго окна.
Инициализируете их в конструкторе
C#
1
2
3
4
5
6
7
8
private readonly DataClass data;
private readonly ChildWindow childWindow;
 
public MainWindow()
{
         InitializeComponent();
         data = new DataClass();
          childWindow = new ChildWindow(data);
Теперь оба поля в разных окнах ссылаются на один и тот же экземпляр. И через него можно передавать данные.
Второе окно надо показывать через модальный диалог.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Запись данных для второго окна
data.Number = 12345;
 
// Скрытие первого окна
Hide () ;
 
// Модальный показ второго окна
childWindow.ShowDialog();
 
// Считывание данных переданных из второго окна
textBlock1.Text = data.Name;
textBlock2.Text = data.TimeStamp.ToString();
 
// Показ первого окна
Show ();
1
4 / 4 / 1
Регистрация: 08.08.2014
Сообщений: 83
12.11.2019, 15:18  [ТС]
Элд Хасп, спасибо за развернутый ответ. Но я пока не очень понимаю, как в моем случае передать данные из второй формы в первую.
У меня на второй форме, условно, кнопка "Сохранить", по которой данные со второй формы передаются в базу Sql. И по этой же кнопке я даю сигнал на обновление данных на первой форме из базы (на первой форме обновляется treeView и Grid)
Т.е. я не понимаю, как дать знать первой форме, что уже ей надо обновляться и читать данные переданные из второй формы, если действовать тем методом, который предложили вы.

Добавлено через 5 минут
Я попробовала и этот способ, который предложил sttrox
C#
1
2
сhildWindow.Hide(); //прячет форму
сhildWindow.Show(); //возвращает форму
Первая форма сворачивается, вторая остается в развернутом состоянии и теперь можно под вторую форму подложить документ, но при этом методе, когда я закрываю вторую форму, первая форма сворачивается автоматически, даже если она было до этого развернута

Добавлено через 42 минуты
Реализовала все же через

C#
1
2
сhildWindow.Hide(); //прячет форму
сhildWindow.Show(); //возвращает форму
Спасибо
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16124 / 11248 / 2888
Регистрация: 21.04.2018
Сообщений: 33,081
Записей в блоге: 2
12.11.2019, 20:01
Tanyusha, если вы используете модальный показ окна как я показал, то логика форм будет работать последовательно.
После вызова childWindow.ShowDialog(); управление перейдет к дочерней форме и вернуться в родительскую только после закрытия дочерней.

Для передачи данных используете поле data.
Так же как я показал в родительской форме, можно записывать или получать данные и в дочерней форме.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.11.2019, 20:01
Помогаю со студенческими работами здесь

Не выполнять действие, пока открыта форма
Здравствуйте. Помогите, пожалуйста, решить небольшую, надеюсь, проблему. Есть форма с кнопкой, при нажатии на которую выполняется...

Выполнять действие, пока открыта форма
Работаю в Windows Forms. Требуется следующее: Пока форма открыта, то программа что-то делает. Вопрос. Как это реализовать? Желательно с...

Остановить выполнение функции пока открыта форма
Всем привет имеется обработка private void InsertData_Click(object sender, EventArgs e) { conn.Close(); ...

Запретить приложению завершаться, пока открыта хоть одна форма.
Привет! У меня такое приложение, примерно как шестой интернет эксплорер. Открывается куча равнозначных окон. К примеру их может быть...

Как создать динамическую форму, если её родитель - вторая форма?
Как создать динамическую форму, если её родитель - вторая форма? У меня 2-е формы, первая - с кнопкой, а вторая, та, потомок которой...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru