簡體   English   中英

控制Windows窗體C#應用程序中的更改

[英]Control changes in a Windows Forms C# application

我有一個包含幾個組件的表單,如TextBoxComboBox ,如果表單中有任何更改,我需要知道何時單擊out按鈕。 有沒有辦法做到這一點?

您可以創建一個通用的更改事件處理程序,它在更改時設置一個標志,然后將所有控件的Change事件分配給它。

通過循環遍歷所有控件onload,這可能很容易完成。

你可以循環遍歷所有控件,但這必須是遞歸的,因為控件可以包含控件,例如(為了簡潔,沒有空檢查):

private void IterateOverControls( Control parent )
{
    ProcessControl( parent );

    foreach( Control control in parent.Controls )
        IterateOverControls( control );
}

在ProcessControl中,您可以掛鈎事件處理程序來處理OnEnter(以存儲狀態)和OnLeave(以針對存儲狀態檢查當前狀態)。 處置時,您需要取消掛鈎所有事件處理程序。 此外,存儲檢查狀態的代碼必須針對不同的控件類型進行更改,例如TextBox將是Text屬性,但單選按鈕將是索引等。顯然,如果您可以將表單狀態與底層事件進行比較,這會變得更簡單數據存儲狀態,在這種情況下,您可以只對每個OnLeave事件進行比較。

還有一點需要考慮的是你需要跟蹤真正的變化嗎? 例如,我有2個單選按鈕:A和B.我檢查B(更改),因此out按鈕或任何具有Enabled屬性的按鈕都會更改。 然后我點擊A(即回到原來的狀態)。 你需要在那時恢復按鈕嗎?

這就是為什么你應該看看模型視圖控制器方法:)

最簡單的方法是簡單地在名為“IsChanged”的表單上使用變量。 在最初顯示表單時將其設置為false,如果進行任何更改,則將其設置為true。

或者,您可以在顯示表單時記錄所有內容的值,並在完成時檢查當前值與舊表單的值,以查看是否有任何更改。

如果這已經快完成了,你需要一些快速的東西,可能會更容易一直假設某些東西發生了變化,然后在你的更新邏輯中(無論它在做什么)不要更新仍然相同的東西。

正如其他人提到的那樣,某人有可能改變某些東西,然后再改回來。 那個案子你想做什么? 如果沒有相當多的額外工作,您將無法保持表單的正確臟狀態。這是您在開始之前需要計划的事情,真的。

暫無
暫無

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

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