TDBGrid在Visible:= false之后不保存TColumn.Width属性

时间:2017-07-18 12:56:40

标签: delphi tdbgrid

使用具有Visible = false的列的TDBGrid保存表单时,不会保存列的Width属性,并且Width属性的原始值将丢失。

上下文是表单(Delphi 10.1 Berlin)上标准VCL TColumn控件中的TDBGrid。如果在对象检查器中将列的Visible属性设置为false,则Width属性将立即转到-1。将Visible设置为true,恢复以前的Width值。

但是,如果在列的Visible属性为false时保存表单,并且表单已关闭并重新打开,则同一列的Visible属性将再次设置为true,Width将始终显示这当然隐藏了右侧的任何其他列,并且会混淆滚动,这会使非技术用户感到困惑。

我怀疑这是一个VCL错误,因为TColumn.Width属性的属性getter(在单元Vcl.DBGrids中)如下:

unit Vcl.DBGrids;
...
function TColumn.GetWidth: Integer;
begin
  if not Showing then      // depends on Visible property
    Result := -1           // obviously streamed to .DFM
  else if cvWidth in FAssignedValues then
    Result := FWidth
  else
    Result := DefaultWidth;
end;

enter image description here

这是一个VCL错误,还是我使用错了?

PS:这与TColumn有什么关系。AssignedValues?或者内置的Delphi DBGrid是否存在缺陷。

编辑:我的应用允许用户在运行时调整主结果网格中的列的大小,重新排序和显示/隐藏列,还可以还原为默认值。我在设计时使用网格作为"主人"恢复默认值时,即默认列宽和顺序,以及默认情况下哪些列可见。但是,默认情况下丢失隐藏列的列宽度会让人感到不安。

0 个答案:

没有答案