我自制一个带图片的IMAGECHECK控件,在IMAGECHECK的VALUE为TRUE时,需将包含该IMAGECHECK控件的父窗体的所有其它IMAGECHECK控件的VALUE设为FALSE。但是该如何判断某个IMAGECHECK控件是本控件呢?
  以下是我寻找同类控件的CODE,不过好象不行,运行时却老是提示堆栈溢出!
  for each c in usercontrol.parent.controls
   if typename(c)="imagecheck" then
   end if
  next
  请高手指点!

解决方案 »

  1.   

    Dim i As Long
        For i = 0 To UserControl.ParentControls.Count - 1
            MsgBox UserControl.ParentControls.Item(i).Name
        Next   Form1
       自己
       其它1
       其它2
       ………如果不放任何容器里如果把控件放在picture1里
       Form1
       Picture1
       自己
       其它1
       其它2
       ………如果把pictur1放在Frame1
       Form1
       Frame1
       Picture1
       自己
       其它1
       其它2
       ………
       
    看到上面的规律了吧,呵呵呵 祝你好运!
      

  2.   

    Dim i As Long
        For i = 0 To UserControl.ParentControls.Count - 1
            MsgBox UserControl.ParentControls.Item(i).Name
        Next    此代码在控件内部,可以自己感受一下!
      

  3.   

    那么在控件CODE内部迭代的时候如何判断是自己呢?用UserControl.Extender其中的属性吗?
      

  4.   

    其实想判断自己很容易,对控件作相应Public FColGuid As String '在控件初始化的时候生成一个guidPublic Property Get ColGuid() As String  '唯一标标识End Property这样应该可以判断出自己吧???呵呵呵,每初始化一个实例就会生成不同的guid,
        For i = 0 To UserControl.ParentControls.Count - 1
            '枚举同类,获取ColGuid的值与FColGuid 相比,相同就是自己啦
        Next
      

  5.   

    是啊,我的思路也是这样的,只不过实现的时候碰到了麻烦,一开始的时候代码进入死循环,导致堆栈溢出,呵呵!  
    现在已经实现了,以下是我的CODE,好象有点繁,请指教!  
    Public  Property  Let  Value(ByVal  new_value  As  Boolean)  
     SetOtherChecks  new_value  
     mValue  =  new_value  
     DrawCheck  
     PropertyChanged  (  "Value  ")  
    End  Property  
     
    Private Sub SetOtherChecks(ByVal nowvalue As Boolean)
     Dim i As Integer
     Dim j As Integer
     Dim k As Integer
     If nowvalue = True Then
      For i = 0 To UserControl.ParentControls.Count - 1
      If UserControl.ParentControls.Item(i).Name = UserControl.Extender.Name Then
       If UserControl.ParentControls.Item(i).Index = UserControl.Extender.Index Then '判断是否是控件自身
        For j = i - 1 To 0 Step -1 '往回寻找父控件
         If UserControl.ParentControls.Item(j) Is UserControl.ParentControls.Item(i).Container Then '判断是否为父控件
            For k = j + 1 To i - 1 '设置控件自身前面的控件(在父控件中)属性
             If TypeName(UserControl.ParentControls.Item(k)) = UserControl.Name Then
              If UserControl.ParentControls.Item(k).Value = True Then
               UserControl.ParentControls.Item(k).Value = False
              End If
             End If
            Next
            For k = i + 1 To UserControl.ParentControls.Count - 1 '设置控件自身后面的控件(在父控件中)属性
             If UserControl.ParentControls.Item(k).Container Is UserControl.ParentControls.Item(i).Container Then
              If TypeName(UserControl.ParentControls.Item(k)) = UserControl.Name Then
               If UserControl.ParentControls.Item(k).Value = True Then
                UserControl.ParentControls.Item(k).Value = False
               End If
              End If
             Else
              'Exit For
             End If
            Next
          Exit For
         End If
        Next
        Exit For
       End If
      End If
      Next
     End If
    End Sub
      

  6.   

    看这个里面吧
    http://expert.csdn.net/Expert/topic/1994/1994246.xml?temp=5.088443E-02
    开两个贴我两边看挺麻烦的,不过就有两边的分可赚了,昨晚我一点多就睡了