2013-04-22 97 views
0

我需要將我的表單控件(文本框,單選按鈕等)的readOnly屬性設置爲readOnly = true或false基於全局變量。獲取頁面上的所有控件

我希望我可以依次通過這樣每個類型的控件:

 For Each Ctrl In Me.Controls 
      Ctrl.ReadOnly = myGlobalTrueFalse 
     Next 

但是,這並不工作,因爲每個按Ctrl沒有隻讀屬性。

任何想法?

謝謝!

+1

一個最好的解決辦法是把你想在'Panel'對象禁用控件,然後只需禁用'面板對象。 – 2013-04-22 17:47:49

回答

2

我用我猜你只需要測試,如果控制有試圖將值分配給它之前的財產。

For Each Ctrl In Me.Controls 
If Ctrl.ReadOnly Is Not Nothing Then 
    Ctrl.ReadOnly = myGlobalTrueFalse 
End If 
Next 

這是更ressources conssuming不是簡單地把所有你想在喜歡的面板的容器禁用控制,禁止容器本身。 (這將禁用其中的所有控件)

+0

我所有的控件都在一個.net ContentPlaceHolder中的標準HTML表格內。其中一個可以作爲一個容器,我可以設置只讀? - 感謝 – SkyeBoniwell 2013-04-22 17:51:55

+0

我真的沒有**參考當談到網絡。我會看看它給我幾分鐘。 – phadaphunk 2013-04-22 17:52:39

+0

它不能簡單地被禁用。我能找到的最好的方法是將其可見性設置爲false,但也會隱藏它的內容。你有可能改變禿鷹嗎? – phadaphunk 2013-04-22 18:00:04

-2
Try 
    For Each Ctrl In Me.Controls 
     Ctrl.ReadOnly = myGlobalTrueFalse 
    Next 
Catch ex As Exception 

End Try 

這時候,發生這種情況

+1

-1。不要使用try catch模式來處理這些事情。如果你發現某些東西你想對它做一些有用的事情,那麼不是簡單地埋沒一個異常。 – phadaphunk 2013-04-22 17:46:13

+1

-1,你至少可以做的是在循環內嘗試,這當然只是少了一點錯誤。 – Behrooz 2013-04-22 17:46:30

+0

@PhaDaPhunk我使用嘗試,因爲它不會停在一個錯誤。適用於我。 – 2013-04-22 17:59:50

1

請先查看PhaDaPhunks的答案。

自從我編寫了任何VB代碼以來,這已經是年份了,但是這應該可以。
你可以添加更多的循環。

For Each Ctrl In Me.Controls 
If Ctrl.ReadOnly Is Not Nothing Then 
    Ctrl.ReadOnly = myGlobalTrueFalse 
End If 
For Each Ctrl2 In Ctrl.Controls 
    If Ctrl2.ReadOnly Is Not Nothing Then 
    Ctrl2.ReadOnly = myGlobalTrueFalse 
    End If 
Next 
Next 
+0

當我看着你的代碼時,我記得我爲什麼**高度偏愛C#語法。 – phadaphunk 2013-04-22 18:07:08

+0

@PhaDaPhunk同意,當然,這是絕對簡單的比較,當我12歲的時候我在VB6中做的。 – Behrooz 2013-04-22 18:10:43

+1

這點是重點。這麼多垃圾郵件在屏幕上執行這樣一項小任務... 0_o – phadaphunk 2013-04-22 18:16:47

1

要訪問的所有控件,包括那些在容器中,使用此

Dim ctrl As Control = Me.GetNextControl(Me, True) 
    Do Until ctrl Is Nothing 
     'perform action here 
     ctrl = Me.GetNextControl(ctrl, True) 
    Loop 
相關問題