2011-02-15 66 views
0

我剛剛接觸Windows編程,就像我以前的工作一樣,我主要參與了Web技術,並且主要在後端。我繼承了一個Winforms應用程序,並且我最大的噩夢之一是瀏覽表單可以處於的無限狀態。管理表單狀態的更好方法是什麼?

爲了舉一個例子,表單具有狀態「新建」和「編輯」,具體取決於是否用戶決定添加或編輯記錄。在這種形式上,我們有邏輯。如果這個texbox有一個特定的值,那麼這些其他文本框就被禁用了,等等。這導致了這些規則的無限鏈接。所以,文本框的TextChanged事件會影響另一個字段。它反過來會觸發改變其他控件狀態的X事件。它很快就會陷入一個無法維持的糾結混亂。

必須有更好的方法...解決這個問題的簡單而優雅的東西。有什麼建議麼?

回答

1

我所做的是使用一種叫做FormatControls()的方法。在這個方法中,我實現了所有的邏輯,如myTextbox.Enabled = mycheckBox.Checked等等。我在我的事件處理程序中調用了這個方法,例如在檢查過的變化等等。我也在適當的時候調用它(即,新加載的沒有數據的表單,從數據庫加載的記錄等)。這對我來說很合適很多年了,它使一切都變得不復雜。

你是對的,如果你沒有使用模式,它可能會變成一個太複雜的東西。

0

您可以嘗試使用Application.Idle事件來執行啓用禁用邏輯並將此部分與業務邏輯部分隔離。

+0

這可能被認爲更「鬆散耦合」,但有可能將CPU固定在100%。 – Reinderien 2011-02-15 14:53:56

+0

@Reinderien如果你不在內部執行代價昂貴的循環,你的CPU不會填充任何代價高昂的負載,只是因爲這個事件是由Windows的舊消息循環引發的。 – 2011-02-15 14:58:20

+0

我不知道我明白這一點。每當整個應用程序閒置時,Application.Idle事件都不會啓動?如果應用程序中有很多表單會怎麼樣?我需要弄清楚當前顯示哪些窗口,然後執行必要的邏輯? – tardomatic 2011-02-16 06:13:37

0

根據您對錶單上的控件的不同,您可能可以取消單獨的文本框和添加/刪除按鈕,並用DataGrid替換整個作品。

相關問題