Why does modal-form disappear completely when minimized?

后端 未结 5 1593
南笙
南笙 2020-12-21 23:51

I\'m trying to have the owner-form minimize when the modal-form is minimized. But when I minimize the modal-form – it disappears completely. (- I can click on the owner-form

相关标签:
5条回答
  • 2020-12-22 00:31

    Add a:

    Show();
    

    At the end of Form2's event-handler.

    0 讨论(0)
  • 2020-12-22 00:34

    This is by design. As part of the modality contract, showing a dialog disables all the other windows in the application. When the user minimizes the dialog window, there are no windows left that the user can access. Making the app unusable. Winforms ensures this cannot happen by automatically closing the dialog when it gets minimized.

    Clearly you'll want to prevent this from happening at all. Set the MinimizeBox property to false. The MaximizeBox property ought to be set to false as well, making both buttons disappear from the window caption. Leaving room for the HelpButton btw.

    0 讨论(0)
  • 2020-12-22 00:39

    Forms have a property ShowInTaskbar. If it is set to false then the form will never appear on the task bar, even when minimized.

    0 讨论(0)
  • 2020-12-22 00:44

    I don't recall every needing this much code to get modal Windows to work. I'm concerned by your comment 'I can click on the owner form', which leads me to believe that the form is nt being correctly set up as modal. By defintion, modal forms must be dealt with before user control can return to the owner form. Minimizinfg the modal form does not constitute properly 'dealing' with the modal form.

    Here is some code that I have used in the past. Notes: passing the owner as parameter in ShowDialog establishes the ownership relationship. While I suspect your code works, I've not used it that way.

    Also, when I have done this, I have not put any special code in the modal form, and have also disabled all the button in the upper right corner of the form; thereby insuring that the user cannot close, minimize, or maximize the modal form outside of any buttons I have provided.

    public partial class Form1 : Form
    {
        Form2 frm2 = new Form2();
    
        public Form1()
        {
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            frm2.ShowDialog(this);
        }
    }
    

    I hope this helps.

    0 讨论(0)
  • 2020-12-22 00:45

    I also had the requirement where when minimizing a dialog form it should minimize the application and when restoring the application it should show the dialog again. Here's what I did:

    MainForm.cs

    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            Form2.Show(this, "Testing 123");
        }
    }
    

    Form2.cs

    public partial class Form2 : Form
    {
        bool isMinimized;
    
        private Form2()
        {
            InitializeComponent();
            ShowInTaskbar = false;
        }
    
        private void Form2_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (Owner != null)
            {
                Owner.Enabled = true;
            }
        }
    
        private void Form2_Load(object sender, EventArgs e)
        {
            MinimizeBox = Owner != null;
            if (Owner != null)
            {
                Owner.Enabled = false;
            }
        }
    
        private void Form2_SizeChanged(object sender, EventArgs e)
        {
            if (Owner != null)
            {
                if (WindowState == FormWindowState.Minimized && Owner.WindowState != FormWindowState.Minimized)
                {
                    Owner.Enabled = true;
                    Owner.WindowState = FormWindowState.Minimized;
                    isMinimized = true;
                }
                else if (isMinimized && Owner.WindowState != FormWindowState.Minimized)
                {
                    Owner.Enabled = false;
                }
            }
        }
    
        public static void Show(Form owner, string message)
        {
            var form2 = new Form2();
            form2.label1.Text = message;
    
            if (owner != null)
                form2.Show(owner);
            else
                form2.ShowDialog();
        }
    }
    
    0 讨论(0)
提交回复
热议问题