2012-03-03 64 views
2

我想通过表单控件RectangleShape循环,但他们告诉我一个ereur当我写的CONTROLE((RectangleShape))循环遍历RectangleShape控制

For Each cnt As Control In Me.Controls 
    If TypeOf cnt Is RectangleShape Then 

    End If 
    Next 

的类型,他们告诉我这个ereeur:“键入'RectangleShape'未定义。“

它的工作原理以及whene我使用的控件类型文本框或其他控件中,表单是这样的:

For Each cnt As Control In Me.Controls 
    If TypeOf cnt Is TextBox Then 

    End If 
    Next 
+0

之间没有继承链可以添加错误你的问题? – 2012-03-03 15:53:49

+0

这就是它:类型'RectangleShape'没有被定义。 – user1233875 2012-03-03 16:00:37

回答

1

拼写出完整的类型名称:

If TypeOf cnt Is Microsoft.VisualBasic.PowerPacks.RectangleShape Then 

或者把这个在你的源代码文件的顶部

Imports Microsoft.VisualBasic.PowerPacks 

但是这不起作用,因为RectangleShape不是一个控件。它由一个名为ShapeContainer的类来托管。你需要这样的代码:

For Each ctl In Me.Controls 
     If TypeOf ctl Is ShapeContainer Then 
      For Each shape In DirectCast(ctl, ShapeContainer).Shapes 
       If TypeOf shape Is RectangleShape Then 
        Dim rect = DirectCast(shape, RectangleShape) 
        '' do something 
        ''... 
       End If 
      Next 
     End If 
    Next 

你可能想利用设计师的创建一个名为变量矩形能力。

+0

现在他们告诉我这个msg:s:s :(('System.Windows.Forms.Control'类型的表达式不能是'Microsoft.VisualBasic.PowerPacks.RectangleShape'类型的表达式)) tdk dudde ^^ – user1233875 2012-03-03 16:10:34

+0

i试试这个对于每个碳纳米管作为RectangleShape在Me.Controls 如果TypeOf运算的CNT RectangleShape然后 MSGBOX(cnt.BackColor) 结束如果 接下来 列表ereur走了,但我执行的形式,他们告诉我这个消息: ((无法转换类型“Microsoft.VisualBasic.PowerPacks.ShapeContainer”的对象键入“Microsoft.VisualBasic.PowerPacks.RectangleShape”。)) – user1233875 2012-03-03 16:14:31

+0

哦,是的,这是一个正确的警告,它不是一个控制。发布更新。什么是矮子?我的名字是汉斯。 – 2012-03-03 16:22:36

2

当然只是让CNT的对象,以便编译器可以投:

For Each cnt As Object In Me.Controls 
    If TypeOf cnt Is RectangleShape Then 

    End If 
Next 

这是因为System.Windows.ControlMicrosoft.VisualBasic.PowerPacks.RectangleShape

+0

tnksssss这是它dudde ^^ – user1233875 2012-03-03 16:18:34

+0

+1,欢迎您 – 2012-03-03 16:20:20