如何使用ListView的Click事件而程序不会出错?(50分)

  • 主题发起人 主题发起人 zouming
  • 开始时间 开始时间
Z

zouming

Unregistered / Unconfirmed
GUEST, unregistred user!
在一窗口放置ListView1和Button1,并设Button1.Enabled:=False,
为了实现通过选择ListView1.Item从而间接地移动数据库记录的目的,在ListView1的
OnClick事件中输入如下代码:

procedure TForm1.ListView1Click(Sender: TObject);
begin
try
if ListView1.Selected.Selected=True then
begin
Button1.Enabled:=True; {如项目选中则使Button按钮可选}
try
Form1.Table1.First;
Form1.Table1.MoveBy(ListView1.Selected.Index);
except
MessageBox(handle,PChar('项目数据库文件错误!'),'警告',MB_OK+MB_ICONWARNING);
end;
end
else
OKButton.Enabled:=False;
except
OKButton.Enabled:=False;
end;
end;

请问如何解决不用通知try ...except... end也能选择ListView1.Item从而实现
移动数据库的记录(请在Delphi集成环境的菜单Tools/Environment Options的
Preferences/Debugging将Break on Exception前的勾去掉)。
 
procedure TForm1.ListView1Change(Sender: TObject; Item: TListItem;
Change: TItemChange);
begin

if ListView1.Selected <> nil then
begin
OKButton.Enabled:=True; {如项目选中则使Button按钮可选}
Form1.Table1.First;
Form1.Table1.MoveBy(ListView1.Selected.Index);
end
else
OKButton.Enabled:=False;

end;

看看是否有效
 
不错,OnChange!
》Form1.Table1.MoveBy(ListView1.Selected.Index);
我怀疑用Index是否正确。如果记录顺序与树的节点顺序完全相同的话,也应该用
AbsoluteIndex,除非树只有一层。
 
就是应该先看看是否为空。
bayu is right.
 
这个问题简单,你在添加ITEMS时将各个记录的BOOKMARK记录到ITEM的DATA中,然后就可以
进行快速移动了,当然,你的表不能被修改。或者修改后,你必须重新刷新LISTVIEW。
var
a:TListItem;
begin
a:=ListView1.Items.Add;
a.Caption:='item1';
a.Data:=Table1.GetBookmark;

使用时就可以用
  table1.gotobookmark(ListView1.Selected.Data);

 
如何使用BookMark?,请详细点。
 
接受多人的答案。
 
后退
顶部