.net - formularios - propiedades de un formulario en c#
¿Cómo desactivo la actualización de un formulario en Windows Forms? (6)
Durante una actualización complicada, es posible que prefiera mostrar todos los cambios a la vez. Sé que hay un método que me permite hacer esto, pero ¿qué es?
Creo que this.SuspendLayout () y ResumeLayout () deberían hacerlo
No creo que SuspendLayout () y ResumeLayout () hagan lo que estás pidiendo. El LockWindowsUpdate () mencionado por moobaa hace el truco. Sin embargo, LockWindowUpdate solo funciona para una ventana a la vez.
También puedes probar esto:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Runtime.InteropServices;
namespace WindowsTest
{
public partial class Form1 : Form
{
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);
private const int WM_SETREDRAW = 11;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SendMessage(this.Handle, WM_SETREDRAW, false, 0);
// Do your thingies here
SendMessage(this.Handle, WM_SETREDRAW, true, 0);
this.Refresh();
}
}
}
Puede usar los métodos SuspendLayout y ResumeLayout en el formulario o los controles al actualizar las propiedades. Si está vinculando datos a los controles, puede usar los métodos BeginUpdate y EndUpdate.
SuspendLayout ayudará al rendimiento si las actualizaciones implican cambios en los controles y el diseño: MSDN
Puede usar la antigua función Win32 LockWindowUpdate :
[DllImport("user32.dll")]
private static extern long LockWindowUpdate(long Handle);
try {
// Lock Window...
LockWindowUpdate(frm.Handle);
// Perform your painting / updates...
}
finally {
// Release the lock...
LockWindowUpdate(0);
}
La mayoría de los componentes de Windows Forms de terceros complejos tienen métodos BeginUpdate
y EndUpdate
o similares, para realizar un lote de actualizaciones y luego dibujar el control. En el nivel de formulario, no existe tal cosa, pero podría interesarle habilitar el doble almacenamiento en búfer .