【发布时间】:2016-07-13 08:52:30
【问题描述】:
给定以下测试表格(在 Delphi 10.1 和 Delphi 2007 中测试):
object Form1: TForm1
Caption = 'Form1'
ClientHeight = 340
ClientWidth = 639
object b_Test: TButton
Caption = 'Test'
OnClick = b_TestClick
end
object od_test: TOpenDialog
Filter = 'blub (blub*.dbf)|blub*.dbf|bla (bla?.dbf)|bla?.dbf'
end
end
(我省略了一些默认属性,基本上它是一个带有 TOpenDialog 和一个按钮的表单。唯一重要的部分是 TOpenDialog.Filter 属性。)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
od_test: TOpenDialog;
b_Test: TButton;
procedure b_TestClick(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.b_TestClick(Sender: TObject);
begin
od_test.Execute;
end;
end.
为什么对话框会像这样两次显示包含问号的过滤器:
这是一个已知的错误还是我做错了什么?如果这是一个已知的错误,是否有解决方法(除了明显的省略描述中的“(bla?.dbf)”部分,这意味着我必须更改所有描述。)?
编辑:这是在 Windows 8.1 上。我还没有尝试过其他版本。如果它有所作为:我已禁用资源管理器选项“隐藏已知文件类型的扩展名”。
【问题讨论】:
-
无法在 Windows 8.1 上使用 Delphi 10.1 Berlin 进行复制。也许是一些操作系统问题?
-
我希望过滤器字符串是:
'blub|blub*.dbf|bla|bla?.dbf'。不需要在名称中重复掩码。所以在你的设置中,bla (...) (...)实际上是正确的,但blub也应该是blub (...) (...)。 -
@RudyVelthuis,如果您想在描述中看到过滤器掩码,您必须编写它。它不会自动添加。过滤器字符串是正确的,图片中显示的加倍是不正确的,虽然我不能说它来自哪里,因为我不能在这里重现它。
-
好的,在 Windows 10 上我可以重现它。如果我的过滤器字符串是
'blub (xxx)|blub*.dbf|bla (yyy)|bla?.dbf',那么我得到blub (xxx) (blub*.dbf)和bla (yyy) (bla?.dbf)。但是,如果我指定与问题中相同的字符串,我会得到相同的结果。显然,打开的对话框会扫描过滤器名称以查找此类 () 条目,如果它们与过滤器相同,则它们仅显示一次。它显然识别*,但不是?作为通配符,因此它不会删除 bla 的双重条目。 -
@Uwe:如果过滤器是
'blub|blub*.dbf|bla|bla?.dbf',那么对话框会显示'blub (blub*.dbf)'和'bla (bla?.dbf)',至少在10.1 Berlin 和Windows 10 中。据我所知,这一直是情况就是这样,我总是这样定义过滤器。过滤器名称中无需重复掩码。
标签: delphi