2009-08-13 116 views
0

在Microsoft Access中,有一種簡單的方法可以通過設置Echo = False來關閉屏幕更新。在WinForms的VB.NET中是否有相當的功能?我遇到了一種情況,我試圖阻止用戶在更新時看到控件閃爍。我可以用不同的方式編碼來解決問題,但如果可以的話,寧願避免它。在VB.NET中關閉屏幕回顯

回答

1

你要做的是暫停並恢復重繪你的表格。這沒有一個託管API,但這是一個相當微不足道的P/Invoke。我不記得用於聲明外部函數的VB.NET語法,但是這個C#示例應該給你提供你需要知道的信息。

[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

感謝您的幫助 - 我已經找到了一種方法來聲明VB.NET中的功能,如下所示: 公共申報函數SendMessage庫 「USER32.DLL」 _ 別名 「的SendMessage」(BYVAL HWND作爲整數,_ BYVAL WMSG作爲的Int32,_ BYVAL wParam中由於布爾,_ BYVAL lParam的作爲Int32)已作爲整數 然而當我調用它時,它會出現一個錯誤,提示「無法在DLL'user32.dll'中找到名爲'SendMessage'的入口點。 任何想法?我不是很熟悉API調用! – Billious 2009-08-13 06:11:19

+0

行,解決了這個問題。在這裏找到正確的聲明:http://www.pinvoke.net/default.aspx/user32.SendMessage。 現在工作就像一個魅力,感謝指出我在正確的方向! – Billious 2009-08-13 06:26:39

0

在C#中(其中,這代表你的表單):

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

這對重新繪製沒有影響,只有佈局操作(錨點,停靠點,佈局控件等) – 2009-08-13 05:24:15

+0

是的,恐怕它不會停止閃爍。 – Billious 2009-08-13 05:29:37