我仿照北京浮生记做的小程序已经差不多完工了.
但是碰到了一个无法解决的问题.
我在界面上做了两个listview 一个是商店的货物和价格(listview1)
+
一个是玩家自己货的仓库.(物品名称,价格,数量)(listview2)
我已经可以实现把listview1的商品和价格放入至listvew2
但是我不知道如何去修改.
比如,我买过了一个物品,买了2件,然后我又要再买5件.但我现在的方法只能在listview2里面再添加一行.而不是在原有的列内进行修改. 还有比如我出售listview2内的物品.数量也无法修改.还有.出售的时候.我需要按listview1里面的价格出售.我无法得到listview1内和listview2内同名的物品的价格.希望高手帮我解答. 不知道是不是listview无法满足此程序的需要.如果真的不能.还望大大们介绍一下其它的组件的方法.谢谢
但是碰到了一个无法解决的问题.
我在界面上做了两个listview 一个是商店的货物和价格(listview1)
+
一个是玩家自己货的仓库.(物品名称,价格,数量)(listview2)
我已经可以实现把listview1的商品和价格放入至listvew2
但是我不知道如何去修改.
比如,我买过了一个物品,买了2件,然后我又要再买5件.但我现在的方法只能在listview2里面再添加一行.而不是在原有的列内进行修改. 还有比如我出售listview2内的物品.数量也无法修改.还有.出售的时候.我需要按listview1里面的价格出售.我无法得到listview1内和listview2内同名的物品的价格.希望高手帮我解答. 不知道是不是listview无法满足此程序的需要.如果真的不能.还望大大们介绍一下其它的组件的方法.谢谢
解决方案 »
- 用sendmessage的问题,求教
- 哪位大哥能帮我写一个产生随机数的程序啊???急求!
- word类型和字符串类型之间如何进行转换?
- 学写控件新手请教:。在win2000中,如何自己写程序把win2000程序的标题栏改为winXP程序的标题栏样式呢?能不能说一下思路。有小例让我参
- 想换个活法!!(求出路,各位进来说说!!)
- 高分请教:有没有一种打包后只有一个执行文件的打包安装软件。(分不够可再加)
- 给新年第一个回贴人(幸运儿)的200分(Delphi版)
- 怎样找出局域网中所有的计算机
- 什么时候会有《Delphi6开发人员指南》啊?
- 这个系统的系统分析,总体设计该如何做?
- 关于dbgrid和stringgrid用法的问题。
- 关于邮件服务器实现的原理
但直接在listview上修改好像不可以,应该新开一个窗体,改完后要刷新
下面的listview2做出相应的减少或增加
答案就是2楼的。
如果要满足你所说的话,你就要在关闭跳出的窗体前就对ListView2做相应的操作了。
我想listveiw里面有相应的修改.
var
PcsLeft, PcsBuy: Integer;
item:TListItem;
begin
with Form1 do begin
PcsLeft := StrToInt(ListView1.Selected.SubItems.Strings[1]) - PcsBuy; //假设件数是在第三列
ListView1.Selected.SubItems.Strings[1]:= IntToStr(PcsLeft); //更新剩余商品数 item := ListView2.FindCaption(0,ListView1.Selected.Caption,false,true,false);
if item<>nil then begin //如果已经有该商品
PcsLeft := StrToInt(ListView2.Selected.SubItems.Strings[1]) + PcsBuy ;
ListView2.Selected.SubItems.Strings[1]:= IntToStr(PcsLeft); //更新
end
else begin //如果还没有该商品,直接copy过来再修改数据为买的
item := ListView2.Items.AddItem(ListView1.Selected);
item.SubItems.Strings[1] := IntToStr(PcsBuy);
end;
end;
end;
只有listview2是有数量的. 所有的修改是针对listview2.只有在出售listview2的商品时.需要用到listview1价格.
item := ListView2.FindCaption(0,ListView1.Selected.Caption,false,true,false);
if item<>nil then begin //如果已经有该商品
PcsLeft := StrToInt(ListView2.Selected.SubItems.Strings[1]) + 5 ;
ListView2.Selected.SubItems.Strings[1]:= IntToStr(pcsleft); //更新
end
//else begin //如果还没有该商品,直接copy过来再修改数据为买的
//item := ListView2.Items.AddItem(ListView1.Selected);
// item.SubItems.Strings[1] := IntToStr(5);
// end;
end;是可以实现.但是有个问题就是.我必须点到listview2后程序才正常.不然程序出错
SkinMessage1.MessageDlg('请选择一个商品!?',mtInformation, [mbOK], 0);
end else if item=nil then
begin
SkinMessage1.MessageDlg('这里没有该商品出售啊!?',mtInformation, [mbOK], 0);
end else begin
itemsale.name:=listview2.Selected.Caption;
itemsale.jiage:=strtoint(listview2.Selected.SubItems.Strings[0]);
itemsale.num:=strtoint(listview2.Selected.SubItems.Strings[1]);
itemsale.ShowModal; end;
我这样写,在没点到listview2时会报错.为什么?是不是?
if ListView2.Selected = nil then
begin
SkinMessage1.MessageDlg('请选择一个商品!?',mtInformation, [mbOK], 0);
exit;
end; item := ListView1.FindCaption(0,ListView2.Selected.Caption,false,true,false); if item=nil then
begin
SkinMessage1.MessageDlg('这里没有该商品出售啊!?',mtInformation, [mbOK], 0);
end else begin
itemsale.name:=listview2.Selected.Caption;
itemsale.jiage:=strtoint(listview2.Selected.SubItems.Strings[0]);
itemsale.num:=strtoint(listview2.Selected.SubItems.Strings[1]);
itemsale.ShowModal;
end;
确定之后,先看一下自身的仓库里是否已经有这种货物,如果有的话,直接把库存的数量更新一下
没有的话,要添加这种货物的名称等。你想一下,要用的代码都已经写出来了,只看你的应用怎么写,你就改那些代码了
不好意思.再麻烦你一下. listview我是第一次用.真的有点迷糊.(本身技术菜也是一个原因^_^)
谢谢你的代码.程序已经不报错了,主要是item:=lise.... 这一行.我一直没解决掉.