SYSTEM-DIALOG GET-FILE с динамическими фильтрами типов файлов - PullRequest
0 голосов
/ 04 октября 2018

Используя OpenEdge 11.7 и Windows 7, я ищу файл диска, используя этот рабочий код:

DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
DEFINE VARIABLE lChose AS LOGICAL NO-UNDO.

SYSTEM-DIALOG GET-FILE cFileName
    FILTERS "Text Files (*.txt)" "*.txt", "Comma-Separated Value Files (*.csv)" "*.csv"
    UPDATE lChose.

Есть ли способ динамически построить список фильтров с помощью переменной?Я пробовал это, но это не работает:

DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
DEFINE VARIABLE cFilters AS CHARACTER NO-UNDO.
DEFINE VARIABLE lChose AS LOGICAL NO-UNDO.

cFilters = '"Text Files (*.txt)" "*.txt", "Comma-Separated Value Files (*.csv)" "*.csv"'.

SYSTEM-DIALOG GET-FILE cFileName
    FILTERS cFilters
    UPDATE lChose. 

Я также пробовал:

FILTERS VALUE(cFilters)

Оба возвращают ошибку «неспособен понять» (198).Можно ли это сделать?

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Кажется, можно написать

DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
DEFINE VARIABLE cFilter1a AS CHARACTER NO-UNDO.
DEFINE VARIABLE cFilter1b AS CHARACTER NO-UNDO.
DEFINE VARIABLE cFilter2a AS CHARACTER NO-UNDO.
DEFINE VARIABLE cFilter2b AS CHARACTER NO-UNDO.
DEFINE VARIABLE lChoose AS LOGICAL NO-UNDO.

assign
    cFilter1a = "Text Files (*.txt)"
    cFilter1b = "*.txt"
    cFilter2a = "Comma-Separated Value Files (*.csv)"
    cFilter2b = "*.csv"
.

SYSTEM-DIALOG GET-FILE cFileName
    FILTERS cFilter1a cFilter1b, cFilter2a cFilter2b
    UPDATE lChoose.

, который может или не может быть полезен для вас.

0 голосов
/ 05 октября 2018

ABL и его забавный синтаксис ... в документации говорится, что каждая метка фильтра и спецификация файла фильтра являются выражением сами по себе.Вы можете пропустить пустые пары, они будут проигнорированы.Так что здесь это работает - элементы массива 5 - 10 пусты и лишены:

DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
DEFINE VARIABLE cFilters AS CHARACTER NO-UNDO EXTENT 10.
DEFINE VARIABLE lChose AS LOGICAL NO-UNDO.

ASSIGN 
    cFilters[1] = "Text Files (*.txt)" 
    cFilters[2] = "*.txt"
    cFilters[3] = "Comma-Separated Value Files (*.csv)"
    cFilters[4] = "*.csv" .

SYSTEM-DIALOG GET-FILE cFileName
    FILTERS cFilters[1] cFilters[2], cFilters[3] cFilters[4], cFilters[5] cFilters[6], cFilters[7] cFilters[8], cFilters[9] cFilters[10]   
    UPDATE lChose. 

Или используйте .NET в качестве альтернативы:

DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
DEFINE VARIABLE cFilters AS CHARACTER NO-UNDO.
DEFINE VARIABLE lChose AS LOGICAL NO-UNDO.

cFilters = "Text Files (*.txt)|*.txt|Comma-Separated Value Files (*.csv)|*.csv".

DEFINE VARIABLE oSystemDialog AS System.Windows.Forms.OpenFileDialog NO-UNDO . 
DEFINE VARIABLE oDialogResult AS System.Windows.Forms.DialogResult NO-UNDO . 

oSystemDialog = NEW System.Windows.Forms.OpenFileDialog () .
oSystemDialog:Filter = cFilters .
oSystemDialog:CheckFileExists = TRUE . 
oSystemDialog:RestoreDirectory  = TRUE .

WAIT-FOR oSystemDialog:ShowDialog () SET oDialogResult . 

IF Progress.Util.EnumHelper:AreEqual (oDialogResult, System.Windows.Forms.DialogResult:OK) THEN
DO:
    ASSIGN lChose = TRUE 
           cFileName = oSystemDialog:FileName. 
END.
ELSE 
    ASSIGN lChose = FALSE 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...