首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Delphi 模拟DBNavigation的前4个按钮解决办法

2012-05-14 
Delphi 模拟DBNavigation的前4个按钮我的程序中只需要DBNavigation的前四个按钮。首先您别告诉我用个panel

Delphi 模拟DBNavigation的前4个按钮
我的程序中只需要DBNavigation的前四个按钮。
首先您别告诉我用个panel或是什么玩意儿把后面几个按钮遮住。。。这个我也能想到o(╯□╰)o
所以我用了4个Button:Button1【首条】,Button2【前一条】,Button3【后一条】,Button4【尾条】。代码如下:

procedure TForm7.Button1Click(Sender: TObject);
begin
  ADOQuery1.First;
  Button1.Enabled:=False;
  Button2.Enabled:=False;
  Button3.Enabled:=True;
  Button4.Enabled:=True;
end;

procedure TForm7.Button2Click(Sender: TObject);
begin
  ADOQuery1.Prior;
  Button3.Enabled:=True;
  Button4.Enabled:=True;
  if ADOQuery1.Bof then begin
  Button1.Enabled:=False;
  Button2.Enabled:=False;
  end
  else begin
  Button1.Enabled:=True;
  Button2.Enabled:=True;
  end;
end;

procedure TForm7.Button3Click(Sender: TObject);
begin
  ADOQuery1.Next;
  Button1.Enabled:=True;
  Button2.Enabled:=True;
  if ADOQuery1.Eof then begin
  Button3.Enabled:=False;
  Button4.Enabled:=False;
  end
  else begin
  Button3.Enabled:=True;
  Button4.Enabled:=True;
  end;
end;

procedure TForm7.Button4Click(Sender: TObject);
begin
  ADOQuery1.Last;
  Button1.Enabled:=True;
  Button2.Enabled:=True;
  Button3.Enabled:=False;
  Button4.Enabled:=False;
end;

但是有点问题:运行时,单按这四个按钮时,他们的Enabled是能够根据首尾与否而变化的,但当我用鼠标单击DBGrid的首尾条、或是用【↑】【↓】将记录移到首尾条的时候,他们的Enabled却变不了,甚至,比如我刚打开Form7,DBGrid默认指向第一条,Button1和Button2都是灰色不可用的,但当我单击中间的任意一条记录时(即记录已经不是首条了),他们并没有变成可用状态,甚至我再用方向键向下走两个记录,还是没变化,甚至走到了最后一条,【首条】和【上一条】还是灰色不可用,【下一条】和【尾条】还是可用的。简而言之就是无法感应键盘的上下键动作和鼠标直接单击DBGrid单元格的动作。我特地用DBNavigation做了下对比,DBNavigation则比较智能,该什么时候变就什么时候变。小弟再次请教诸位大神,应该怎样修改这4个Button的代码呢?

[解决办法]
DBNavigator.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast];

DBNavigator.VisibleButtons设置这个属性就可以了呀!
[解决办法]

Delphi(Pascal) code
procedure TForm7.SetButton();begin   if ADOQuery1.State in [dsInsert,dsEdit] then   begin     Button1.Enabled:=False;     Button2.Enabled:=False;     Button3.Enabled:=False;     Button4.Enabled:=False;   end else   begin     Button1.Enabled:=not ADOQuery1.Bof;     Button2.Enabled:=not ADOQuery1.Bof;     Button3.Enabled:=not ADOQuery1.Eof;     Button4.Enabled:=not ADOQuery1.Eof;   end end;procedure TForm7.Button1Click(Sender: TObject);begin  ADOQuery1.First;end;procedure TForm7.Button2Click(Sender: TObject);begin  ADOQuery1.Prior;end;procedure TForm7.Button3Click(Sender: TObject);begin  ADOQuery1.Next;end;procedure TForm7.Button4Click(Sender: TObject);begin  ADOQuery1.Last;end;procedure TForm7.ADOQuery1AfterScroll(DataSet: TDataSet);begin  SetButton();  end; 

热点排行