Тема: Як правильно ховати вікно ? Трей+MDI

Як правильно сховати дочірні вікна в MDI?
Windows forms. Згортаю вікно програми в системний лоток ховаючи його, але коли вікно розгортається з системного лотка, то дочірні вікна опиняють не там де вони були до згортання.

2

Re: Як правильно ховати вікно ? Трей+MDI

Краще замініть MDI чимось іншим. Думаю, що під Windows forms є компоненти, які дозволяють працювати з кількома вікнами в середині головного вікна.

3

Re: Як правильно ховати вікно ? Трей+MDI

офтоп

Це таке дали завдання на заправці, чи пет-проект?

https://replace.org.ua/post/186868/#p186868

4

Re: Як правильно ховати вікно ? Трей+MDI

На запраці.

5

Re: Як правильно ховати вікно ? Трей+MDI

Для чого ховати дочірні вікна в MDI ?
Достатньо ховати+показати основне вікно, тоді всі дочірні вікна будуть там де були.

Може там MDI не дуже то й треба ?

Torbins написав:

є компоненти, які дозволяють працювати з кількома вікнами в середині головного вікна.

Це й є MDI, навіть якщо воно зроблено не стандартними функціями.

6

Re: Як правильно ховати вікно ? Трей+MDI

Вони не будуть там де були. Вони зміщаються всередині головно вікна або змінюють розмір.

7

Re: Як правильно ховати вікно ? Трей+MDI

javascriptIsLife написав:

Вони не будуть там де були.

А тепер диви:

using System;
using System.Windows.Forms;

namespace MDI_and_Tray_usage {
    public partial class Form_MDI_test : Form {
        public Form_MDI_test() {
            InitializeComponent();
        }
        private void addNewWindow_ToolStripMenuItem_Click(object sender, EventArgs e) {
            SuspendLayout();
            Form form = new Form();
            form.Width = 200;
            form.Height = 100;
            form.MdiParent = this;
            form.Show();
            ResumeLayout(false);
        }
        private void notifyIcon_forTray_Click(object sender, EventArgs e) {
            string title, text;
            if(Visible) {
                notifyIcon_forTray.Visible = true;
                Hide();
                text = "Зроби клік щоб розгорнути основне вікно.";
                title = "Зараз вікно закрито";
            }
            else {
                Show();
                text = "Зроби клік щоб згорнути основне вікно в трей.";
                title = "Зараз вікно відкрито";
            }
            notifyIcon_forTray.Text = text;
            notifyIcon_forTray.BalloonTipText = text;
            notifyIcon_forTray.BalloonTipTitle = title;
        }
    }
}
javascriptIsLife написав:

Вони зміщаються всередині головно вікна або змінюють розмір.

Тільки якщо творець накидав сміття в код.

Потягни архів, розпакуй, там є код, приклад як можна робити. Якщо хвилює сісюріті, то *.exe не розпаковуй, тільки код і ресурси, і зробиш білд/компіль.

Post's attachments

MDI_and_Tray_usage.7z 38.24 kb, 5 downloads since 2025-01-21 

Подякували: javascriptIsLife1

8

Re: Як правильно ховати вікно ? Трей+MDI

Та блін. Дійсно все так просто. Не впевнений що саме я такого понаклацував бо проект відкривав давненько, але видалив рядки які міняли значення ShowInTaskbar і поки воно приховує головне вікно а дочірні вікна залишаються на своїх місцях. Тепер ще треба зʼясувати чому в системному лотку множиться піктограма. Ура, тепер до моєї ЗП в 10000 грн. додадуть щомісячну доплату в 1000 грн.

Подякували: leofun011