2011-04-05 61 views
4

隨着我的程序的增長和發展,我一直在發現我越來越多地使用Control.Tag。我不太確定微軟爲什麼把它放在那裏,但我覺得它非常有用。.Net Control.Tag - 常見和不常見的用途

我還在想:他們最初的目的是什麼?什麼被認爲是可以接受的,什麼被認爲是禁忌?

根據MSDN的說明,Control.Tag「獲取或設置包含有關控件的數據的對象。」

在我的日曆應用程序中,我存儲了一個AppointmentControl表示的實際Appointment對象。我懷疑這是它的預期用途,MSDN上的例子似乎證實了這一點,但是我也做了一些不尋常的事情。

例如,當我有一個後退/下一個按鈕對,當我們到達開始位置時我想要禁用,而當我們到達結束位置時禁用下一個按鈕,然後將下一個按鈕存儲在標記中的前一個按鈕,以及下一個標籤中的上一個按鈕。這樣,我總是可以點擊設置((Button)Tag).Enabled = true(因爲當您移回去時,顯然禁用的下一個按鈕將變爲啓用狀態,反之亦然)。另外,我的日曆由(視覺)二維面板數組組成。我存儲DateTime,其中每個面板對應於Panel.Tag,並且當用戶放大以查看一天中的時隙時,組成每個時隙的面板在它們的標籤中具有時間跨度,其代表時隙的開始時間。

所以我很好奇:你認爲什麼是最常見的標籤使用?什麼是您使用過或見過的標籤更爲不尋常的應用?你會考慮存儲一個鏈接的對象(如我的後/下一個按鈕示例)是「哈克」嗎?

有人反對使用標籤,表明他們是舊語言的殘餘。一個常見的抱怨是,最好簡單地擴展一個控件,使其包含一個強類型的對象,而不是任何需要在使用時進行轉換的東西。你怎麼看待這件事?

回答

5

這來自VB6,它的控件也有一個Tag屬性。這是一個非常糟糕的替代你的類中的字段,它不是類型安全的,因爲Tag是Object類型的。使您的代碼難以閱讀,它有一個非特定的名稱。如果您需要將其與控件關聯,則使用繼承。從控件類型派生類並添加所需的屬性。或者在您的表單中添加一個字段。