[gelöst] Dialog bei Auswahl eines Ordners mit ESC beenden

12. Mai 2014 18:36

Hallo,
ich habe ein kleines Form gebastelt, wo man über den Assist-Trigger einen Pfad auswählen soll.
Es funktioniert auch alles ziemlich gut.
Aber wenn der Ordner-Dialog geöffnet ist, und es wird kein Pfad ausgewählt, sondern der Dialog wird mit Escape beendet, erhalte ich eine Fehlermeldung die ich gerne abfangen würde.
Fehlermeldung lautet:
Diese Meldung ist für C/AL-Programmierer:
Für diese Automation Variable wurde keine Instanz erstellt. Sie können ihr eine Instanz zuordnen, indem Sie sie entweder erstellen oder zuordnen.

Der Assist-Button ruft folgende Funktion auf:

Variablen:
Name DataType Subtype Length
ShellControl Automation 'Microsoft Shell Controls And Automation'.Shell
Folder Automation 'Microsoft Shell Controls And Automation'.Folder3
FolderText Text 1024
LastString Text 1
strTools Codeunit StringTools


Code:
OpenFolder(WindowTitle : Text[50];FolderName : Text[1024]) : Text[1024]
IF ISCLEAR(ShellControl) THEN
  CREATE(ShellControl);
FolderText := FORMAT(ShellControl.BrowseForFolder(0,WindowTitle,0).Items().Item.Path);
LastString:=strTools.Right(FolderText,1);
IF LastString <> '\' THEN
  FolderText:=STRSUBSTNO('%1\',FolderText);
IF NOT ISCLEAR(ShellControl) THEN
  CLEAR(ShellControl);
EXIT(FolderText);


Hat jemand eine Idee, wie ich das abfangen kann?
Danke und Gruß,
Daggi
Zuletzt geändert von DaggiBuh am 14. Mai 2014 09:31, insgesamt 2-mal geändert.

Re: Dialogfenster bei Auswahl eines Ordners mit ESC beenden

13. Mai 2014 09:27

Du könntest die Funktion in eine Codeunit packen, die du mit "if DeineCodeunit.run then .." abfängst.

Re: Dialogfenster bei Auswahl eines Ordners mit ESC beenden

13. Mai 2014 10:03

es wäre interessant, wenn du uns noch sagen könntest, an welcher codestelle er rausspringt

Re: Dialogfenster bei Auswahl eines Ordners mit ESC beenden

13. Mai 2014 10:12

sweikelt hat geschrieben:es wäre interessant, wenn du uns noch sagen könntest, an welcher codestelle er rausspringt


Dass muss ja hier sein:
Code:
FolderText := FORMAT(ShellControl.BrowseForFolder(0,WindowTitle,0).Items().Item.Path); 

Es wird auf [...].Items.[...] zugegriffen, obwohl kein Path gewählt worden war. Items ist damit leer --> Laufzeitfehler.
Man sollte diese Zeile eigentlich auf mehrere Zeilen aufbrechen. Ein Codebeispiel habe ich allerdings gerade nicht zur Hand. Aber BrowserForFolder hat doch bestimmt einen boolean-Rückgabewert, oder gibt direkt den Pfad ohne dem Umweg über Items zurück, sodass man ihn auf leer abfragen kann?

Re: Dialogfenster bei Auswahl eines Ordners mit ESC beenden

13. Mai 2014 12:06

Natalie hat geschrieben:Es wird auf [...].Items.[...] zugegriffen, obwohl kein Path gewählt worden war. Items ist damit leer --> Laufzeitfehler.

Genau.

Natalie hat geschrieben:Man sollte diese Zeile eigentlich auf mehrere Zeilen aufbrechen.

So geht's:
Code:
CREATE(ShellControl,TRUE); // in Nav 5 ohne Parameter: CREATE(ShellControl);

Folder2 := ShellControl.BrowseForFolder(0,WindowTitle,0);
IF  ISCLEAR(Folder2) THEN
  ERROR
('Kein Verzeichnis ausgewählt!')
ELSE
  BEGIN
    FolderItem 
:= Folder2.Self;
    EXIT(FolderItem.Path + '\');
  END;

neu:
Code:
Name    DataType    Subtype    Length
Folder2    Automation    
'Microsoft Shell Controls And Automation'.Folder2    
FolderItem    Automation    
'Microsoft Shell Controls And Automation'.FolderItem

Re: Dialogfenster bei Auswahl eines Ordners mit ESC beenden

14. Mai 2014 09:29

*GELÖST*

Natalie und McClane:
Vielen lieben Dank. Auf die Idee mit dem Aufteilen hätte ich auch selber kommen können :roll: :lol:
So wie ihr es beschrieben habt funktioniert es einwandfrei!