簡體   English   中英

加速控件的啟用/禁用(C#WinForms)

[英]Speed up the enabling/disabling of controls (C# WinForms)

我在基本表單上有一個遞歸方法,它接受一個控件和一個啟用標志。 它遍歷表單上的每個控件,並根據控件類型,相應地設置控件的背景顏色,並將enabled屬性設置為參數。

所以通常,該方法被稱為傳遞(this)作為控件,它遍歷所有控件及其控件並相應地設置事物。 這已經工作正常但是表單已經添加了越來越多的控件,你可以實際看到控件逐個禁用,它看起來不太好。

有沒有人知道如何重寫或阻止它逐一顯示每個控件的禁用過程? 像SuspendLayout這樣的東西會在這種情況下起作用嗎? 它不是一個選項,可以在表單中添加一個面板,只是禁用它並在最后重新啟用它,因為我有大約200個表單繼承自這個基本表單,並且不能通過每個表單並強制它將控件添加到面板。 這也行不通,因為它不僅可以啟用/禁用控件,還可以應用其他邏輯。

將修改包含在:

form.SuspendLayout();

form.ResumeLayout(false); // read the doc about "false", might be a little unsafe

此外,遍歷控制層次結構可能非常耗時。 你可以這樣做一次並將它們緩存在一個列表中,然后在那之后引用該列表。

重寫OnPaint方法,只有在完成禁用它們時才調用super :: OnPaint(IsDoneDisabling = true)。 這只是一種解決方法,而不是一個好的設計。

OnPaint(...)
{
if (IsDoneDisabling)
    super::OnPaint(...);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM