Lisää

Kaikki laajennukset Avaa Tiedosto-valintaikkuna

Kaikki laajennukset Avaa Tiedosto-valintaikkuna


GetOpenFilename ei toimi arcobjects VBA: ssa, joten minun on käytettävä pGxDialogia.

Normaali pGxDialog ei anna avata haluamaasi tiedostoa, vain muutama laajennus on käytettävissä (shp, dxf, xls ...).

Ehkä en vain tiedä kuinka asettaa suodatin.

Minun ei tarvitse avata ylimääräisiä laajennustiedostoja lukemista / kirjoittamista varten, minun on vain palautettava asiakirjan PATH muuttujaan, jota käytetään myöhemmin koodissa.

I komentosarjat VBA: ssa, arcgis 10.2.2


Voit soittaa suoraan COM object dll

Yksityisen ilmoituksen funktio GetOpenFileName Lib "comdlg32.dll" Alias ​​"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) niin kauan yksityinen tyyppi OPENFILENAME lStructSize niin pitkä hwndOwner kuin pitkä hInstance niin pitkä lpstrFilter As StrilF StrongFile AsstrilF StrongFail As StrilF StrongFail Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String-liput kuin Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustData As Long lpfnHook Asame Fame StringNimi Asp. Himmennä OpenFile nimellä OPENFILENAME HimmennäPalauta niin pitkä Dim sFilter kuin merkkijono OpenFile.lStructSize = Len (OpenFile) 'Suodatin sFilter = "prj" & Chr (0) & "* .prj" & Chr (0) & Chr (0) OpenFile. lpstrFilter = sFilter OpenFile.nFilterIndex = 1 OpenFile.lpstrFile = Merkkijono (257, 0) OpenFile.nMaxFile = Len (OpenFile.lpstrFile) - 1 OpenFile.lpstrFileTitle = O penFile.lpstrFile OpenFile.nMaxFileTitle = OpenFile.nMaxFile 'oletuspolku OpenFile.lpstrInitialDir = "c: "' Otsikko OpenFile.lpstrTitle = Titre OpenFile.flags = 0 lReturn = GetOpenFileName (OpenFile = 0) Jos lRet Muut f_OpenFileName = Leikkaa (OpenFile.lpstrFile) Loppu, jos lopputoiminto

käytä toimintoa:

Dim txtSelectFile As String polku = f_OpenFileName ("Valitse tiedosto")

Tämä on olennaisesti tutkan työtä vastauksessa samankaltaiseen kysymykseen, käyttäen samoja ArcObjectsia kuin Hornbydd.

Olen muokannut tutkan toimintoa asiakkailleni valitsemaan erotetun tekstitiedoston, jolloin tämä toiminto palauttaa sekä valitun tiedoston polun että tiedoston nimen. Tämä täyttää Alexin pyynnön "... palauttaa asiakirjan PATH muuttujaan"

Leikkain sen hieman alas, joten se käyttää vain ArcObjects-ydinkirjastoja.

Julkinen toiminto BrowseForTextFile (ByVal sTitle As String, ByRef sFolder As String, ByRef sName As String) Boolean-lähteenä: Tutka / kysymykset / 9000 / opening-geodatabase-files-using-selaa-dialogi-komento-vb-net-c- of-arcobjects Dim pGxDialog Kuten IGxDialog = Uusi GxDialog Dim pGxObjectFilter Kuten IGxObjectFilter = New ESRI.ArcGIS.Catalog.GxFilterTextFiles () Dim pFilterCol Kuten IGxObjectFilterCollection Dim pEnumGx Kuten IEnumGxObject Dim pGxObject Kuten IGxObject sFolder = "" SNAME = "" pFilterCol = pGxDialog pFilterCol. AddFilter (pGxObjectFilter, True) pGxDialog.RememberLocation = True pGxDialog.AllowMultiSelect = Väärä pGxDialog.Title = sTitle Jos pGxDialog.DoModalOpen (0, pEnumGx) Sitten PGnOxGame = pGxOxx Loppu, jos Loppu-toiminto

Voit soittaa tähän

Tuo ESRI.ArcGIS.Catalog 'for IGxObjectFilter Tuo ESRI.ArcGIS.CatalogUI' IGXdialog-ystävälle m_sFilePathName merkkijonona '... katkaissut Dim sCSVPath merkkijonona Dim sCSVName merkkijonona Jos BrowseForTextFile, "Valitse sSVVV m_sFilePathName = sCSVPath & "" & sCSVName MsgBox ("Valitsemasi tiedosto oli" & m_sFilePathName, MsgBoxStyle.Information, "Tulos") Muu "Ei mitään valittu, keskeytä Exit Sub End Jos

Tässä tapauksessa haluan vain, että valintaikkunassa näkyy eroteltuja tekstitiedostoja, joten käytän GxFilterTextFiles-tiedoston GxObjectFilter-tiedostoa. Voit määrittää 'GxFilterFiles', jos haluat vain valita minkä tahansa tiedoston

Jokaisessa ArcCatalog-objektissa on myös pistemäärä kokolaseista ja luokista, jos sinun on suodatettava selainikkuna toiseen tyyppiin. Voit esimerkiksi käyttää 'GxFilterMaps' kohdistaaksesi .mxd-asiakirjoja tai 'GxFilterFileGeodatabases' määrittääkseen FGDB: t. Voit olla vielä tarkempi, esimerkiksi valita ominaisuusluokat tiedostojen geotietokannoista vain, jos sinun on tehtävä se.


Alla on tarvitsemasi koodi:

Julkinen Sub OpenDataset () "avaa ikkunan käyttäjän valita FeatureClasses Dim pEnumGXObject Kuten IEnumGxObject Set pEnumGXObject = Nothing Dim pGxDialog Kuten IGxDialog Dim pGXObjectFilter Kuten IGxObjectFilter Set pGXObjectFilter = Uusi GxFilterFeatureClasses Set pGxDialog = Uusi GxDialog kanssa pGxDialog .AllowMultiSelect = False .Title =" Valitse tiedosto ".ButtonCaption =" Valitse "Aseta .ObjectFilter = pGXObjectFilter .DoModalOpen 0, pEnumGXObject End With pEnumGXObject.Reset Dim pGxobject As IGxObject Set pGxobject = pEnumGxt

Tiedän, että kysymys koski nimenomaan VBA: ta, ja on hieman päivätty, mutta koska löysin tämän kysymyksen etsimällä ratkaisua vastaavaan tilanteeseen c # .net -palvelua käyttäen, lähetän löytämäni ratkaisun.

Ensinnäkin, jotta voit avata minkä tahansa laajennuksen, jota Catalog ei vielä tarjoa, sinun on määritettävä oma mukautettu GX-suodatinluokka. Alla luon suodattimen XML-laajennuksille.

julkinen luokka GxCustomFilter: ESRI.ArcGIS.Catalog.IGxObjectFilter {private IGxObjectFilter _basicFilter; public GxCustomFilter () {_basicFilter = uusi GxFilterBasicTypesClass (); } public bool CanChooseObject (ESRI.ArcGIS.Catalog.IGxObject obj, ref ESRI.ArcGIS.Catalog.esriDoubleClickResult result) {// Määritä, voidaanko valittu objekti valita bool bCanChoose = false; bCanChoose = väärä; if (obj on IGxFile) {merkkijono sExt = null; sExt = GetExtension (obj.Nimi); if (sExt.ToLower () == ".xml") // määritä laajennuksesi täältä bCanChoose = true; } return bCanChoose; } public bool CanDisplayObject (ESRI.ArcGIS.Catalog.IGxObject obj) {// Tarkista, voidaanko objekteja näyttää, kokeile {// Tarkista objektit, jos (_basicFilter.CanDisplayObject (obj)) palauttaa arvon true; else if (obj on IGxFile) {merkkijono sExt = null; sExt = GetExtension (obj.Nimi); if (sExt.ToLower () == ".xml") // määritä laajennuksesi tässä return true; }} catch (Exception ex) {System.Windows.Forms.MessageBox.Show (ex.ToString ()); } return false; } public bool CanSaveObject (ESRI.ArcGIS.Catalog.IGxObject Location, string newObjectName, ref bool objectAlreadyExists) {palauta false; } public string Description {get {// Set file file description return "eXtensible Markup Language (.xml)"; }} public string Name {get {// Aseta suodattimen nimi palauttamaan "XML-suodatin"; }} yksityinen merkkijono GetExtension (merkkijono sFileName) {merkkijono tempGetExtension = null; // Hae laajennus pitkä pExtPos = 0; pExtPos = (sFileName.LastIndexOf (".") + 1); if (pExtPos> 0) tempGetExtension = sFileName.Substring ((Int32) pExtPos - 1); else tempGetExtension = ""; paluu tempGetExtension; }}

Määritä sitten GxDialogissa mukautettu luokka ObjectFilter. Sinun on myös määritettävä tiedostosuodattimet GxDialog.InternalCatalogissa.

IGxDialog gxDialog = uusi GxDialog (); IGxCatalog gxCat = gxDialog.InternalCatalog; IGxFileFilter fileFilter = gxCat.FileFilter; if (fileFilter.FindFileType ("XML") <0) {fileFilter.AddFileType ("XML", "eXtensible Markup Language", ""); } IGxObjectFilter objFilter = uusi GxCustomFilter (); gxDialog.ObjectFilter = objFilter;

Jos haluat käyttää suodatinta GxDialog.DoModalSave (): n kanssa, sinun on muokattava mukautetun suodatinluokan ominaisuutta CanSaveObject palauttamaan true.

Toivon, että tämä auttaa jotakuta, koska vietin kauemmin kuin olisin halunnut selvittää sen.


Katso video: EKAA KERTAA LUMILAUDALLA huvittavaa