当用户单击它们毫无意义时,我喜欢禁用控件。
一个特殊情况是一组自定义菜单按钮,它们模拟标准的第一个、上一个、下一个和最后一个按钮TDBNavigator
。
当用户点击第一个按钮时,第一个和前一个按钮都被禁用。
当用户然后单击下一个和上一个按钮时,底层证券与以前TDataSet
一样位于同一记录上,但第一个和上一个按钮仍处于启用状态。
当前的实现如下所示:
NavigationFirstButton.Enabled := not DataSet.IsEmpty and not DataSet.Bof;
NavigationPriorButton.Enabled := not DataSet.IsEmpty and not DataSet.Bof;
NavigationNextButton.Enabled := not DataSet.IsEmpty and not DataSet.Eof;
NavigationLastButton.Enabled := not DataSet.IsEmpty and not DataSet.Eof;
Bof
并且Eof
不是禁用按钮的正确方法,因为我必须事先知道当前记录是否将成为第一条/最后一条记录。
所以我想用IsFirstRecord
andIsLastRecord
方法重写它:
function IsFirstRecord(ADataSet: TDataSet): Boolean;
begin
Result := ADataSet.RecNo = 0;
end;
function IsLastRecord(ADataSet: TDataSet): Boolean;
begin
Result := ADataSet.RecNo = ADataSet.RecordCount - 1;
end;
我认为这不是一个好主意,因为我见过第一个记录RecNo = 0
不正确的情况。(即过滤的 TADSQuery)
IsFirstRecord
和的可靠实现是IsLastRecord
什么?甚至可以使用当前的TDataSet
架构吗?