Search code examples
c#winformsbuttonscreenshotvisibility

Button does not want to stop being visible


So, I'm trying to make simple screenshot app in Window Forms, but i would like my button to dissapear whenever I take a shot. Unfortunately, it does not want to be invisible, even after setting Visible to false:

        {
            InitializeComponent();
            this.BackColor = Color.Red;
            this.TransparencyKey = BackColor;
            this.FormBorderStyle = FormBorderStyle.None;
            this.WindowState = FormWindowState.Maximized;
        }

        Image tmp = Image.FromFile("C:/Users/Bartek/source/repos/Hadr/Hadr/Image/image.png");

        private void button1_Click_1(object sender, EventArgs e)
        {
            Bitmap bmp = new Bitmap(tmp.Width, tmp.Height);
            Graphics g = Graphics.FromImage(bmp);
            button1.Visible = false;
            g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size);
            pictureBox1.Image = bmp;
            bmp.Save("C:/Folder/image1.png",System.Drawing.Imaging.ImageFormat.Png);
        }

I have set dock on picturebox to fill, and placed button in the way showed on screen: enter image description here

I'm kindly asking for help


Solution

  • Hide the button first and then use BeginInvoke() to defer making the screenshot until the system updates controls, like this:

    private void button1_Click_1(object sender, EventArgs e)
    {
        button1.Visible = false;
        BeginInvoke(MakeScreenShot);
    }
    
    void MakeScreenshot()
    {
        Bitmap bmp = new Bitmap(tmp.Width, tmp.Height);
        Graphics g = Graphics.FromImage(bmp);
        g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size);
        pictureBox1.Image = bmp;
        bmp.Save("C:/Folder/image1.png", System.Drawing.Imaging.ImageFormat.Png);
        
        button1.Visible = true;
    }