2013-04-22 116 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 
相关问题