Paint or Hide Control Box for Borderless Form while maximize and minimize

前端 未结 1 533
我寻月下人不归
我寻月下人不归 2021-01-23 06:47

I\'ve attached a small example about the issue. How can I hide the control box completely during Maximize and Minimize the Borderless Form

using System.Windows.F         


        
相关标签:
1条回答
  • 2021-01-23 07:09

    I can confirm the issue. When restoring a border-less Form from minimized state, a ghost of a title-bar shows at top-left of the window for a very short time.

    Reproducing the issue

    To reproduce the problem, it's enough to create a border-less form by setting FormBorderStyle property to None and then minimize and restore it in a timer. Start the program by showing the form and look at top-left of the window, after restore.

    using System;
    using System.Windows.Forms;
    class Form1 : Form
    {
        public Form1()
        {
            var timer = new Timer() { Interval = 1000 };
            this.Text = "Some Text";
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            timer.Tick += (x, y) =>
            {
                if (this.WindowState != FormWindowState.Minimized)
                    this.WindowState = FormWindowState.Minimized;
                else
                    this.WindowState = FormWindowState.Normal;
            };
            timer.Start();
        }
    }
    

    Workaround

    Here is the workaround which I used to remove that flicker. It's enough to add the event handler to above Form1 class and register it for Activated event this.Activated += Form1_Activated;.

    private void Form1_Activated(object sender, EventArgs e)
    {
        if (this.WindowState == FormWindowState.Minimized)
            this.Hide();
        this.BeginInvoke(new Action(() =>
        {
            if (this.WindowState != FormWindowState.Minimized && !Visible)
                this.Show();
        }));
    }
    
    0 讨论(0)
提交回复
热议问题