ListView1中有许多项目名称:
1、当更改其中一个项目名称结束时,如果发现更改后的名称与ListView1中现有项目名称相同时:
A、不允许此次更名,并提示已有相同项目名称存在;
B、该项目名称恢复修改前的名称,而且使该项目名称处于重命名状态;
现在遇到的问题是:上述问题不知如何实现,求代码!
2、当更改其中一个项目名称结束时,如果发现更改后的名称与ListView1中现有项目名称 不 相同时:
A、将修改后的名称写入数据库;
B、如果觉得有问题时,可以再次修改;
现在现在遇到的问题是:第A步可以实现,但我第二次修改(第B步)时就不成功了,请问如何处理?相关代码如下:procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
var
i:integer;
begin
if listview1.selected<>nil then
begin
for i:=ListView1.Items.Count-1 downto 0 Do
if ListView1.Items[i].Selected then
begin
YCN:=ListView1.Items[i].Caption; //全局变量,获取变更前的ListView1名称,用于下面的更新
end;
end;
end;
procedure TForm1.ListView1Changing(Sender: TObject; Item: TListItem; //更新listview1时更新数据库
Change: TItemChange; var AllowChange: Boolean);
var
i:integer;
XCN:string;
begin
if listview1.selected<>nil then
begin
for i:=ListView1.Items.Count-1 downto 0 Do
if ListView1.Items[i].Selected then
begin
XCN:=ListView1.Items[i].Caption;
if Trim(YCN)<>Trim(XCN) then //加上这句判断才表示方案名称变动过,感觉还是有问题
with ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Text:='UPDATE ……';
ExecSql;
break;
end;
end;
end;
end;
1、当更改其中一个项目名称结束时,如果发现更改后的名称与ListView1中现有项目名称相同时:
A、不允许此次更名,并提示已有相同项目名称存在;
B、该项目名称恢复修改前的名称,而且使该项目名称处于重命名状态;
现在遇到的问题是:上述问题不知如何实现,求代码!
2、当更改其中一个项目名称结束时,如果发现更改后的名称与ListView1中现有项目名称 不 相同时:
A、将修改后的名称写入数据库;
B、如果觉得有问题时,可以再次修改;
现在现在遇到的问题是:第A步可以实现,但我第二次修改(第B步)时就不成功了,请问如何处理?相关代码如下:procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
var
i:integer;
begin
if listview1.selected<>nil then
begin
for i:=ListView1.Items.Count-1 downto 0 Do
if ListView1.Items[i].Selected then
begin
YCN:=ListView1.Items[i].Caption; //全局变量,获取变更前的ListView1名称,用于下面的更新
end;
end;
end;
procedure TForm1.ListView1Changing(Sender: TObject; Item: TListItem; //更新listview1时更新数据库
Change: TItemChange; var AllowChange: Boolean);
var
i:integer;
XCN:string;
begin
if listview1.selected<>nil then
begin
for i:=ListView1.Items.Count-1 downto 0 Do
if ListView1.Items[i].Selected then
begin
XCN:=ListView1.Items[i].Caption;
if Trim(YCN)<>Trim(XCN) then //加上这句判断才表示方案名称变动过,感觉还是有问题
with ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Text:='UPDATE ……';
ExecSql;
break;
end;
end;
end;
end;
解决方案 »
- 关于INDY 服务端(IdTCPServer) 以结构体接收数据,现在我想接收错误结构体的数据,请大家指点.
- 请教2个关于TChart 的问题
- FastReport中遇到的打印问题(横向打印与纵向打印)--急--
- 想做一个播放器, 不知到哪位大虾有例子可以给小弟一个学习一下..40分送上
- 如何把工具栏按钮标签显示在图标右侧?渴望赐教!在线等待...
- 有没有这样的sql语句
- 如何让DBGrid字段内容可编辑,但却不会提交到数据库中???
- 请问如何让窗体中的控件根据窗体的大小不同而显示不同的大小和位置????????
- 请问再多线程里调用方法是否是并行执行的?
- DELPHI 两表模糊查询问题
- 如何做一个这样的图形编辑
- 帮把易语言代码译成DELPHI
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
ListView1: TListView;
procedure ListView1Edited(Sender: TObject; Item: TListItem;
var S: String);
procedure ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
private
{ Private declarations }
str:string;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ListView1Edited(Sender: TObject; Item: TListItem;
var S: String);
begin
if s = 'a' then //这里换成自己的条件
S := str
else
str := s;
end;procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
str := Item.Caption;
end;end.
if i>=0 then
showmessage('已经有相同的项目名称')
YCN 哪來的??
procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
var
i:integer;
begin
if listview1.selected <>nil then
begin
for i:=ListView1.Items.Count-1 downto 0 Do
if ListView1.Items[i].Selected then
begin
YCN:=ListView1.Items[i].Caption;//全局变量,获取变更前的ListView1名称,用于下面的更新
end;
end;
end;
从你的代码实现的效果来看,你把所有选中的caption都放到一个字符串变量中,因此在检查是否修改时,肯定是都修改过了。不知道楼主能否明白。
procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
str := Item.Caption; //str全局变量
end;昨天反复测试过,两个问题仍然有问题,期待解决中!
procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
var
s1,s2:string;
begin
if self.vg_item=nil then
else
begin
if Item<>self.vg_item then
begin
s1:=self.vg_caption;
s2:=self.vg_item.Caption;
self.Label1.Caption:=s1;
self.Label2.Caption:=s2;
end;
end;
self.vg_item:=Item;
self.vg_caption:=item.Caption;
end;
Selected: Boolean);
var
s1,s2:string;
begin
if Selected then
Item.Checked:=True
else
item.Checked:=False;
if Selected then
begin
if self.vg_item=nil then
else
begin
if Item<>self.vg_item then
begin
s1:=self.vg_caption;
s2:=self.vg_item.Caption;
self.Label1.Caption:=s1;
self.Label2.Caption:=s2;
end;
end;
self.vg_item:=Item;
self.vg_caption:=item.Caption;
end;
end;
Item.Checked:=True
else
item.Checked:=False;
这几句去掉就行,vg_item:TListItem;vg_caption:string定义为全局变量
procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
str:=Item.Caption; //全局变量,获取只是变更前的ListView1名称,用于下面的更新
end;procedure TForm1.ListView1Edited(Sender: TObject; Item: TListItem; //更新listview1时更新数据库
var S: String);
var
i,n:integer;
TorF : Boolean;
begin
begin
TorF := False;
for i:=ListView1.Items.Count-1 downto 0 Do
begin
n := CompareStr(ListView1.Items[i].Caption, Trim(S));
if n = 0 then
begin
TorF := True;
break;
end;
end;
end;
if TorF then //找到同名提示是否替换
begin
MessageBox(handle,PChar(' 方案 < '+s+' > 名称已存在 '),'提示信息',MB_ICONASTERISK);
s:=str;
Abort;
end
else
begin
with ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Text:='UPDATE ……';
ExecSql;
end;
end;
end;