Lors d'une mise à jour compliquée, je pourrais préférer afficher tous les changements à la fois. Je sais qu'il existe une méthode qui me permet de faire cela, mais qu'est-ce que c'est?Comment désactiver la mise à jour d'un formulaire dans Windows Forms?
Répondre
Je pense this.SuspendLayout() & ResumeLayout() devrait le faire
tiers les plus complexes Windows Forms composants ont BeginUpdate
et EndUpdate
méthodes similaires, pour effectuer une série de mises à jour et puis dessiner la contrôle. Au niveau du formulaire, il n'y a pas une telle chose, mais vous pourriez être intéressé en activant Double buffering.
Vous pouvez utiliser les méthodes SuspendLayout et ResumeLayout dans le formulaire ou les contrôles lors de la mise à jour des propriétés. Si vous liez des données à des contrôles, vous pouvez utiliser les méthodes BeginUpdate et EndUpdate.
SuspendLayout contribuera à la performance si les mises à jour impliquent des modifications de commandes et mise en page: MSDN
Vous pouvez utiliser l'ancienne Win32LockWindowUpdate fonction:
[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);
}
Hmmmm. Intéressant. –
Essayez plutôt cette syntaxe: private static extern long LockWindowUpdate (IntPtr Handle); et LockWindowUpdate (IntPtr.Zero); –
LockWindowUpdate n'est pas conçu pour arrêter le scintillement. Vous devriez utiliser 'SetWindowRedraw (hwnd, false)'. (http://blogs.msdn.com/b/oldnewthing/archive/2004/06/10/152612.aspx) –
Je ne trouve pas SuspendLayout() et ResumeLayout() fait ce que vous demandez. LockWindowsUpdate() mis au point par moobaa fait l'affaire. Toutefois, LockWindowUpdate ne fonctionne que pour une fenêtre à la fois.
Vous pouvez aussi essayer ceci:
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();
}
}
}
méthodes BeginUpdate et EndUpdate sur lequel? Un formulaire ne les a pas. –