加为好友
发送私信
在线聊天
发表于:2008-03-27 08:37:11 4 楼 得分:20
请参考: 设计一组维护记录的命令按钮 *------------------------------------- 设计思路: 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 至此编写一组记录维护的命令按钮组基本完成,你可以将这组命令按钮保存为类方便今后调用。当然在情况发生变化的时候仍需要修改相应的代码以适应新的情况。 *---------------------------------------------------------------------- 以下是一个简单的例子,请参考使用: 设表名为:BOTO1 设表字段:NAME,SEX,AGE 均为字符型,长度10。 建立一个表单:DEMO.SCX 表单上有: 四个按钮:添加、保存、删除、退出 三个文本框:TEXT1、TEXT2、TEXT3 一个Grid表: 表单的Load事件: USE boto1 表单的Init事件: THIS.GRID1.RECORDSOURCE='BOTO1' THIS.GRID1.DELETEMARK=.F. THIS.GRID1.READONLY=.T. FOR I=1 TO 3 J=ALLTRIM(STR(I)) THIS.TEXT&J..ENABLED=.F. ENDFOR This.Text1.Value=ALLTRIM(name) This.Text2.Value=ALLTRIM(sex) This.Text3.Value=ALLTRIM(age) 表单的Unload事件: USE IN BOTO1 Grid的AfterRowColChange事件: LPARAMETERS nColIndex ThisForm.Text1.Value=ALLTRIM(name) ThisForm.Text2.Value=ALLTRIM(sex) ThisForm.Text3.Value=ALLTRIM(age) thisform.refresh 添加按钮的Click事件: IF MESSAGEBOX('是否使用录前值?',4+32+256,'信息提示')=7 ThisForm.text1.value='' ThisForm.text2.value='' ThisForm.text3.value='' ENDIF ThisForm.text1.Enabled= .T. ThisForm.text2.Enabled= .T. ThisForm.text3.Enabled= .T. ThisForm.Text1.SetFocus 保存按钮的Click事件: APPEND BLANK replace name WITH ALLTRIM(thisform.text1.value) replace sex WITH ALLTRIM(thisform.text2.value) replace age WITH ALLTRIM(thisform.text3.value) ThisForm.text1.Enabled= .f. ThisForm.text2.Enabled= .f. ThisForm.text3.Enabled= .f. Thisform.grid1.Refresh 删除按钮的Click事件: IF MESSAGEBOX('是否删除此条记录?',4+32+256,'信息提示')=7 OR RECCOUNT('BOTO1')=0 RETURN ENDIF SELECT BOTO1 DELETE THISFORM.GRID1.RECORDSOURCE=NULL PACK THISFORM.GRID1.RECORDSOURCE='BOTO1' GO TOP THISFORM.GRID1.REFRESH 退出按钮的Click事件: Thisform.Release
修改
删除
举报
引用
回复