如何实现这样的输入方式?(50分)

  • 主题发起人 主题发起人 nplang
  • 开始时间 开始时间
N

nplang

Unregistered / Unconfirmed
GUEST, unregistred user!
如何实现这样的输入方式?

如1》 窗体A是进货单 ; 有功能键《添加》,击《添加》键弹出窗体C
2》窗体B是销售单 有功能键《添加》,击《添加》键弹出窗体C
3》窗体C 是用于商品选择,窗体A和B可以公共调用 有功能键《确定》 和《取消》

》说明:在窗体C是选择商品的一条记录后,击窗体C中的《确定》键后,商品记录能自动添加到
进货单或销售单中,在反复操作: 选择商品记录 《===》确定 之后,窗体C并
没有关闭。
》但是 :如果都在窗体C写添加记录代码,这要建立多个相同的商品信息窗体。这代码不简练。
如果能在窗体A或窗体B中写代码,实现从窗体C中多次 选择商品并插入到窗体A或窗体C中
注意,窗体C是在点击《取消》键时才CLOSE窗体C。这样可以少建立多个商品信息窗体!

》如何实现?如果只在窗体C中选择一要记录我能实现,但选择N条记录时,我不能。帮帮我吧!
 
窗体C不写添加记录的代码,而是作为一个选择输入的途径,返回一个字段值
(如商品记录的主键值)或一个集合(你所说的N条记录)
然后A或B再根据返回的结果做相应的处理
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
if Form2.ModalResult = mrOK then
begin
// 处理你所选择的多条记录; 可以使用数组纪录
ShowMessage('OK CLICKED');
end else
begin
ShowMessage('CANCEL CLICKED');
end;
end;
 
同意楼上的
你的窗口C设计的根本思想就是作为录入窗口
干吗要把其他功能硬塞进去呢?
发送自己定义的消息!
 
wcwcw
你的方法不错,怕不怕在C窗只按一次《确定》时,会CLOSE窗C呢?
如果不会我立马散分了!
 
ok!我的方法不一定很好,不过也许可能实现你的功能!
1,用全局变量来判断是A窗还是B窗发出的请求,
2,在c窗中用一个actionlist来根据请求的不同而向就的改变C窗中确定是的代码,
3,如果你用的是dbgird可能不太好对多条记录的实现,可以用LISTBOX这样简单一些:-)
只要将商品的简单信息ADD到LISTBOX中就行了,然后再用个数组什么的就行了!

呵呵,有点投机,不过也算是一个变法吧!!
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
if 你选择了商品纪录 then
if Form2.ModalResult = mrOK then
begin
// 处理你所选择的多条记录; 可以使用数组纪录
ShowMessage('OK CLICKED');
end else
begin
ShowMessage('CANCEL CLICKED');
end;
end;
 
简单的方法, 不用创建C!
在A,B当中添加 DBGrid用来显示用于商品选择, 然后再DataModule当中写一个公共的过程
//窗体A
Procedure frmA.PostClick(Sender: TObject);
begin
frmDM.PostData(你选择的一条或者多条纪录);
end;
//窗体B
procedure frmB.PostClick(Sender: TObject);
begin
frmDM.PostData(你选择的一条或者多条纪录);
end;
//DataModule
procedure frmDM.PostData
begin
//更新数据库
end;
 
同意楼上的看法!
 
但是我是想创建C窗体。后实现输入。
难道真的没有办法?
 
参考办法
定义公共变量MYTargetForm:tform
在A中调用C时, MYTargetForm:=forma
在B中调用C时, MYTargetForm:=formB
在 A ,B中定义相同的添加过程,例MYADD
在C中双击选中的商品时,执行
MYTargetForm.MYADD;
MYTargetForm.update;
这样即可不退出C,还立刻在A或B上显示添加后的结果
 
多人接受答案了。
 

Similar threads

后退
顶部