2009-08-13 6 views
0

Dans Microsoft Access, il existait une méthode simple pour désactiver les mises à jour d'écran en définissant Echo = False. Existe-t-il un équivalent dans VB.NET pour WinForms? J'ai une situation où j'essaie d'empêcher les utilisateurs de voir les contrôles scintiller pendant qu'ils sont mis à jour. Je pourrais probablement résoudre le problème en le codant différemment, mais je préférerais l'éviter si je le peux.Désactivation de l'écho d'écran dans VB.NET

Répondre

1

Ce que vous cherchez à faire est de suspendre et de reprendre le redessin de votre formulaire. Il n'y a pas d'API gérée pour cela, mais c'est un P/Invoke assez trivial pour le faire. Je ne me souviens pas de la syntaxe VB.NET pour déclarer des fonctions externes, mais cet exemple C# devrait vous donner les informations dont vous avez besoin.

[DllImport("user32.dll")] 
public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam); 

private const int WM_SETREDRAW = 11; 

public static void SuspendDrawing(Control target) 
{ 
    SendMessage(target.Handle, WM_SETREDRAW, false, 0); 
} 

public static void ResumeDrawing(Control target) 
{ 
    SendMessage(target.Handle, WM_SETREDRAW, true, 0); 
    target.Refresh(); 
} 
+0

Merci pour l'aide - j'ai trouvé un moyen de déclarer la fonction dans VB.NET, comme suit: Public Declare fonction SendMessage Lib "user32.dll" _ Alias ​​"SendMessage" (ByVal hwnd As Integer, _ ByVal WMSG Comme Int32, _ ByVal wParam As Boolean, _ ByVal lParam Comme Int32) As Integer Cependant quand je l'appelle, il se présente avec une erreur disant "Impossible de trouver un point d'entrée nommé 'SendMessage' dans la DLL 'user32.dll'. Des idées? Je ne suis pas très expérimenté avec les appels d'API! – Billious

+0

OK, résolu le problème. Trouvé la déclaration correcte ici: http://www.pinvoke.net/default.aspx/user32.SendMessage. Fonctionne comme un charme maintenant, merci de m'indiquer dans la bonne direction! – Billious

0

En C# (où cela représente votre formulaire):

this.SuspendLayout(); 
// Make your changes 
this.ResumeLayout(false); 
+0

Cela n'a aucun effet sur le redessin, seulement les opérations de mise en page (ancre, dock, contrôles de disposition, etc.) –

+0

Oui, je crains que cela n'arrête pas le scintillement. – Billious

Questions connexes