es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El botón no quiere dejar de ser visible.

Entonces, estoy tratando de hacer una aplicación simple de captura de pantalla en Windows Forms, pero me gustaría que mi botón desaparezca cada vez que tomo una captura. Desafortunadamente, no quiere ser invisible, incluso después de establecer Visible en false:

public Form1()
{
    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);
}

He establecido el acoplamiento (dock) en el PictureBox para que ocupe todo el espacio, y coloqué el botón de la forma que se muestra en la pantalla:

Imagen

Amablemente solicito ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que establecer la visibilidad del botón en falso en el evento button1_Click_1 no está funcionando. Una posible solución sería utilizar un Timer para retrasar el cambio de visibilidad. Aquí tienes un código de ejemplo:

    public partial class Form1 : Form
    {
        private Image tmp = Image.FromFile(@"C:\Users\Bartek\source\repos\Hadr\Hadr\Image\image.png");
        private Timer timer = new Timer();
    
        public Form1()
        {
            InitializeComponent();
            this.BackColor = Color.Red;
            this.TransparencyKey = BackColor;
            this.FormBorderStyle = FormBorderStyle.None;
            this.WindowState = FormWindowState.Maximized;
    
            // Configurar el temporizador
            timer.Interval = 1000;
            timer.Tick += Timer_Tick;
        }
    
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            // Iniciar el temporizador cuando se carga el formulario
            timer.Start();
        }
    
        private void Timer_Tick(object sender, EventArgs e)
        {
            // Detener el temporizador y ocultar el botón
            timer.Stop();
            button1.Visible = false;
        }
    
        private void button1_Click_1(object sender, EventArgs e)
        {
            Bitmap bmp = new Bitmap(tmp.Width, tmp.Height);
            Graphics g = Graphics.FromImage(bmp);
    
            // Ocultar el botón después de un retraso
            timer.Start();
    
            g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size);
            pictureBox1.Image = bmp;
            bmp.Save(@"C:\Folder\image1.png", System.Drawing.Imaging.ImageFormat.Png);
        }
    }
    

    En este ejemplo, utilizamos un Timer para retrasar el cambio de visibilidad del botón. Configuramos el temporizador en el constructor y lo iniciamos en el evento OnLoad. También nos suscribimos al evento Tick para manejar el cambio de visibilidad. Cuando se hace clic en el botón, iniciamos el temporizador y continuamos con la lógica de captura de pantalla. Cuando el temporizador alcanza el tiempo establecido, lo detenemos y ocultamos el botón. Esto debería funcionar y el botón debería desaparecer después de un retraso.

Comments are closed.