如何用代码实现象向导一样功能?
用向导生成的表单由于数据环境的影响,实在错误太多,还是不用向导的好.
但是,我不知道如何编写代码才能实现添加,编辑,保存,以及还原等按纽的功能(都象用向导生成的一样!)请高手赐教!在线急等.. 时间紧迫,明天就要交差了..请各位帮忙了..
问题点数:20、回复次数:3Top
1 楼TERRYYRRET(命运)回复于 2006-03-21 07:40:51 得分 10
我给你看看吧Top
2 楼apple_8180(十豆三)回复于 2006-03-21 08:41:07 得分 10
请参考:
http://www.sfyb.net/bbs/list.asp?boardid=12
http://www.bc-cn.net/bbs/Article/22.html
设计一组维护记录的命令按钮
*-------------------------------------
设计思路:
1.该命令按钮组含有[新增]、[修改]、[删除]、[存储]、[取消]等命令按钮。
2.在运行新增或修改功能时,除了[存储]、[取消]按钮可操作,其余按钮都设置为禁止状态,防止使用者操作不当引起错误。
3.不是运行新增或修改功能时,除了[存储]、[取消]按钮为禁止状态外,其它按钮都是可以选择操作。
4.在运行新增或修改功能时,光标自动会跳到第一个输入框(文本框)中。
设计步骤:
1、从[表单控件]工具栏点工具按钮,添加一个命令按钮组到表单上,默认有Command1和Command2两个命令按钮。
2.设置CommandGroup对象的AutoSize属性为.T.,BottonCount属性为5,Name属性为UpdateBtn。
3.设置其中的各个按钮属性如下:
Command1:Caption="新增" FontSize=12 Name=CmdNew
Command2:Caption="修改" FontSize=12 Name=CmdEdit
Command3:Caption="删除" FontSize=12 Name=CmdDel
Command4:Caption="存储" FontSize=12 Name=CmdSave
Command5:Caption="取消" FontSize=12 Name=CmdCancel
4.在表单新增一属性UpDateMode,用于存储表单当前是否处于可编辑状态(即新增或修改状态),初始值为.f.。
5.在表单上所有可编辑对象的When Event方法程序里都写上一句: RETURN ThisForm.UpDateMode
6.设置表单的数据环境的表缓冲模式为“3-开放式行缓冲”。
7.因为在编写代码时一般要控制定位记录的按钮,以下编写代码假设表单上存在另一组用于定位记录的按钮组,取名为Navigator,其中的四个按钮分别为:
首记录:CmdTop;
上一记录:CmdPrior;
下一记录:CmdNext;
末记录:CmdBottom
8.编写[新增]按钮的Click Event方法程序的代码:
ThisForm.UpdateMode=.t. &&进入新增状态后,将该属性的值设为.t.,每个字段可编辑 Append Blank
With This.Parent
.Parent.Refresh
.CmdNew.Enabled=.f.
.CmdEdit.Enabled=.f.
.CmdDel.Enabled=.f.
.CmdSave.Enabled=.t.
.CmdCancel.Enabled=.t.
.Parent.Navigator.SetAll("Enabled",.f.) &&将记录定位按钮设置为禁止状态
.Parent.Text1.SetFocus &&进入新增状态后,光标自动进入第一个输入框。
EndWith
9.编写[修改]按钮的Click Event方法程序的代码:
ThisForm.UpdateMode=.t.
With This.Parent
.Parent.Refresh .CmdNew.Enabled=.f.
.CmdEdit.Enabled=.f.
.CmdDel.Enabled=.f.
.CmdSave.Enabled=.t.
.CmdCancel.Enabled=.t.
.Parent.Navigator.SetAll("Enabled",.f.)
.Parent.Text1.SetFocus EndWith
10.编写[删除]按钮的Click Event方法程序的代码:
nSure=MessageBox("是否确定删除此记录?",4+32+256,"警告")
if nSure=6
Delete
Skip
If Eof()
Go Bottom
With This.Parent
.Parent.Navigator
.CmdTop.Enabled=.t.
.CmdPrior.Enabled=.t.
.CmdNext.Enabled=.f.
.CmdBottom.Enabled=.t.
EndWith
Else
This.Parent.Parent.Navigator.SetAll("Enabled",.t.)
EndIf
This.Parent.Parent.Refresh
EndIf
说明:为了提高程序运行效率,应将程序的运行环境中的Set Deleted设置为On,即隐藏删除记录,但是在运行删除命令后,必须移动记录指针,被删除的记录才会隐藏。一般来说在删除记录后应该用TableUpdate()更新原始表,但这里我们开始将数据环境设置为开放式的行缓冲,所以Skip以后会自动更新。
11.编写[存储]按钮的Click Event方法程序的代码:
ThisForm.UpdateMode=.f. &&恢复编辑框的只读状态
=TableUpdate(.f.) &&将缓冲区所编辑的数据写回原始记录。
With This.Parent
.CmdNew.Enabled=.t.
.CmdEdit.Enabled=.t.
.CmdDel.Enabled=.t.
.CmdSave.Enabled=.f.
.CmdCancel.Enabled=.f.
.Parent.Navigator.SetAll("Enabled",.t.)
EndWith
12.编写[取消]按钮的Click Event方法程序的代码:
ThisForm.UpdateMode=.f. &&恢复编辑框的只读状态
=TableRevent(.f.)
If Eof()
Go Bottom
With This.Parent
.Parent.Navigator
.CmdTop.Enabled=.t.
.CmdPrior.Enabled=.t.
.CmdNext.Enabled=.f.
.CmdBottom.Enabled=.t.
EndWith Else
This.Parent.Parent.Navigator.SetAll("Enabled",.t.)
EndIf
With This.Parent
.CmdNew.Enabled=.t.
.CmdEdit.Enabled=.t. .CmdDel.Enabled=.t.
.CmdSave.Enabled=.f.
.CmdCancel.Enabled=.f.
.Parent.Refresh
EndWith
13.在Form的load里写:
Set Deleted On
Go Top
在Form的Unload里写:
Set Deleted Off
至此编写一组记录维护的命令按钮组基本完成,你可以将这组命令按钮保存为类方便今后调用。当然在情况发生变化的时候仍需要修改相应的代码以适应新的情况。
Top
3 楼IntoWindy(水煮肉片)回复于 2006-03-21 18:12:17 得分 0
11.编写[存储]按钮的Click Event方法程序的代码:
ThisForm.UpdateMode=.f. &&恢复编辑框的只读状态
=TableUpdate(.f.) &&将缓冲区所编辑的数据写回原始记录。
With This.Parent
.CmdNew.Enabled=.t.
.CmdEdit.Enabled=.t.
.CmdDel.Enabled=.t.
.CmdSave.Enabled=.f.
.CmdCancel.Enabled=.f.
.Parent.Navigator.SetAll("Enabled",.t.)
EndWith
12.编写[取消]按钮的Click Event方法程序的代码:
ThisForm.UpdateMode=.f. &&恢复编辑框的只读状态
=TableRevent(.f.)
If Eof()
Go Bottom
With This.Parent
.Parent.Navigator
.CmdTop.Enabled=.t.
.CmdPrior.Enabled=.t.
.CmdNext.Enabled=.f.
.CmdBottom.Enabled=.t.
EndWith Else
This.Parent.Parent.Navigator.SetAll("Enabled",.t.)
EndIf
With This.Parent
.CmdNew.Enabled=.t.
.CmdEdit.Enabled=.t. .CmdDel.Enabled=.t.
.CmdSave.Enabled=.f.
.CmdCancel.Enabled=.f.
.Parent.Refresh
EndWith
用这两段代码是报错!
分别是=TableUpdate(.f.) &&将缓冲区所编辑的数据写回原始记录。
和=TableRevent(.f.)
这两句,我该怎么解决?Top




