' 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