Suite

Sélectionner l'espace de travail et les jeux de données dans la même boîte de dialogue à l'aide d'ArcObjects ?

Sélectionner l'espace de travail et les jeux de données dans la même boîte de dialogue à l'aide d'ArcObjects ?


Je veux sélectionner l'espace de travail et l'ensemble de données dans la même boîte de dialogue et voici mon code pour l'espace de travail :

private IWorkspace BrowseForWorkspace(int hwnd) { IGxDialog gxDlg = new GxDialogClass(); gxDlg.ObjectFilter = new GxFilterWorkspacesClass(); gxDlg.AllowMultiSelect = false; espaces de travail IEnumGxObject ; IWorkspace ws = null; if (gxDlg.DoModalOpen(hwnd, out workspaces) && workspaces != null) { IGxObject gxObj = workspaces.Next(); if (gxObj est IGxDatabase) { var gxDb = gxObj as IGxDatabase; ws = gxDb.Workspace; } else if (gxObj est IGxFolder) { IWorkspaceFactory wsf = new ShapefileWorkspaceFactoryClass(); ws = wsf.OpenFromFile(((IGxFile)gxObj).Path, hwnd); } Marshal.FinalReleaseComObject(espaces de travail); } gxDlg.InternalCatalog.Close(); Marshal.FinalReleaseComObject(gxDlg); retour ws; }

et voici mon code pour l'ensemble de données :

private IDatasetName Browse(int hwnd) { IGxDialog gxDlg = new GxDialogClass(); gxDlg.ObjectFilter = new GxFilterDatasetsAndLayersClass(); gxDlg.AllowMultiSelect = false; espaces de travail IEnumGxObject ; IDatasetName datasetName = null; if (gxDlg.DoModalOpen(hwnd, out workspaces) && workspaces != null) { var gxObj = (IGxDataset)workspaces.Next(); if (gxObj != null) { var dataset = gxObj; datasetName = dataset.DatasetName; } Marshal.FinalReleaseComObject(espaces de travail); } gxDlg.InternalCatalog.Close(); Marshal.FinalReleaseComObject(gxDlg); return datasetName ; }

Comment les lier ensemble ?


Je crois que vous voulez créer un filtre d'objet personnalisé. Voici une discussion sur le forum ESRI qui a eu lieu il y a 10 ans. Ils parlent d'extensions de fichiers personnalisées, mais vous devriez pouvoir adapter le code pour gérer les espaces de travail et les ensembles de données.

Ma question est pourquoi ? Ils sont fondamentalement différents, l'un étant un "conteneur" d'ensembles de données, l'autre étant l'ensemble de données. Je pense qu'essayer de rendre votre dialogue "générique" va être problématique car vous devez ensuite tester que l'utilisateur a sélectionné un objet valide.