带有动态文件类型过滤器的 SYSTEM-DIALOG GET-FILE
SYSTEM-DIALOG GET-FILE with dynamic file type filters
使用 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)
return 和 "unable to understand" 错误 (198)。这还能做到吗?
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
好像可以这样写
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.
这对你可能有用也可能没用。
使用 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)
return 和 "unable to understand" 错误 (198)。这还能做到吗?
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
好像可以这样写
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.
这对你可能有用也可能没用。