One To Many Labels
frmOneToManyProps.frm

' Copyright 2008 ESRI
' 
' All rights reserved under the copyright laws of the United States
' and applicable international laws, treaties, and conventions.
' 
' You may freely redistribute and use this sample code, with or
' without modification, provided you include the original copyright
' notice and use restrictions.
' 
' See use restrictions at <your ArcGIS install location>/developerkit/userestrictions.txt.
' 




Option Explicit

Private m_pApp As IApplication
Private m_pSite As IComPropertyPageSite
Private m_bIsProgrammaticPageUpdate As Boolean
Private m_bIsDirty As Boolean
Public m_pFeatLayer As IFeatureLayer

Private Sub updatestatus()
    If Not m_pSite Is Nothing And Not m_bIsProgrammaticPageUpdate And m_bIsDirty Then
        m_pSite.PageChanged
    End If
End Sub

Public Sub SetPageSite(ByVal RHS As IComPropertyPageSite)
    Set m_pSite = RHS
End Sub

Public Property Let IsProgrammaticPageUpdate(ByVal val As Boolean)
    m_bIsProgrammaticPageUpdate = val
End Property

Private Sub cmbField_Click()
  updatestatus
End Sub

Private Sub cmbField2_Click()
  updatestatus
End Sub

Private Sub cmbRelClass_Click()
On Error GoTo ErrHand:
  Dim pObjClass As IObjectClass, pEnumRel As IEnumRelationshipClass
  Dim pRelClass As IRelationshipClass, lCount As Long
  Dim pDestClass As IObjectClass, pFields As IFields
  
  cmbField.Enabled = False
  cmbField2.Enabled = False
  
  Set pObjClass = m_pFeatLayer.FeatureClass
  Set pEnumRel = pObjClass.RelationshipClasses(esriRelRoleOrigin)
  lCount = 0
  pEnumRel.Reset
  Set pRelClass = pEnumRel.Next
  Do While Not pRelClass Is Nothing
    If (pRelClass.Cardinality = esriRelCardinalityOneToMany) Or _
     (pRelClass.Cardinality = esriRelCardinalityManyToMany) Then
      If cmbRelClass.ListIndex = lCount Then
        Exit Do
      End If
      lCount = lCount + 1
    End If
    
    Set pRelClass = pEnumRel.Next
  Loop
  
  If pRelClass Is Nothing Then
    MsgBox "Could not find the relationship class in cmbRelClass_Click event!!!"
    Exit Sub
  End If
  
  'Populate the field combo
  cmbField.Clear
  cmbField2.Clear
  cmbField2.AddItem "<none>"
  Set pDestClass = pRelClass.DestinationClass
  Set pFields = pDestClass.Fields
  For lCount = 0 To pFields.FieldCount - 1
    If pFields.Field(lCount).Type <> esriFieldTypeGeometry And _
     pFields.Field(lCount).Type <> esriFieldTypeBlob Then
      cmbField.AddItem pFields.Field(lCount).Name
      cmbField2.AddItem pFields.Field(lCount).Name
    End If
  Next lCount
  
  If cmbField.ListCount > 0 Then
    cmbField.Enabled = True
    cmbField2.Enabled = True
    cmbField.ListIndex = 0
    cmbField2.ListIndex = 0
  End If

  Exit Sub
ErrHand:
  MsgBox "cmbRelClass_Click - " & Err.Description
End Sub

Public Sub UpdateSettings()
On Error GoTo ErrHand:
  m_bIsProgrammaticPageUpdate = True
  m_bIsDirty = True
  
  cmbRelClass.Enabled = False
  cmbField.Enabled = False
  cmbField2.Enabled = False
  cmbRelClass.Clear
  cmbField.Clear
  cmbField2.Clear
  
  Dim pObjClass As IObjectClass, pEnumRel As IEnumRelationshipClass
  Dim pRelClass As IRelationshipClass, pFeatClass As IFeatureClass
  cmbRelClass.Clear
  Set pObjClass = m_pFeatLayer.FeatureClass
  Set pEnumRel = pObjClass.RelationshipClasses(esriRelRoleOrigin)
  pEnumRel.Reset
  Set pRelClass = pEnumRel.Next
  Do While Not pRelClass Is Nothing
    If (pRelClass.Cardinality = esriRelCardinalityOneToMany) Or _
     (pRelClass.Cardinality = esriRelCardinalityManyToMany) Then
      'make sure we are not looking at a feature-linked annotation class
      If TypeOf pRelClass.DestinationClass Is IFeatureClass Then
        Set pFeatClass = pRelClass.DestinationClass
        If Not pFeatClass.FeatureType = esriFTAnnotation Then
          cmbRelClass.AddItem pRelClass.ForwardPathLabel
        End If
      Else
        cmbRelClass.AddItem pRelClass.ForwardPathLabel
      End If
    End If
    
    Set pRelClass = pEnumRel.Next
  Loop
  
  If cmbRelClass.ListCount > 0 Then
    cmbRelClass.Enabled = True
    cmbRelClass.ListIndex = 0
  Else
    cmbRelClass.Enabled = False
  End If

  Exit Sub
ErrHand:
  MsgBox "UpdateSettings - " & Erl & " - " & Err.Description
End Sub

Private Sub Form_Unload(Cancel As Integer)
  Set m_pApp = Nothing
  Set m_pSite = Nothing
  Set m_pFeatLayer = Nothing
End Sub