• 全部
  • API 调用
  • 基础类
  • 控件与界面
  • 数据库相关
  • DataWindow
  • 项目管理
  • Web 应用
  • 脚本语言

请教一个问题?

zzhouj 2002-03-12 11:12:04
我使用PB8.0开发一个登录界框时,本来预想是:
在单行编辑框sle_username内输入用户名,按回车,焦点移到单行编辑框sle_password上,方法是在sle_username的modified事件脚本中写入:

if keydown(13) then sle_password.setfocus()

再输入密码,再按回车,触发命令按钮cb_ok的clicked事件,方法是在sle_password的modified事件脚本中写入:

if keydown(13) then cb_ok.triggerevent(clicked!)


//cb_ok的clicked事件的脚本如下:
string username
string password

username=trim(sle_username.text)

SELECT CRM_User.Password
INTO :password
FROM CRM_User
WHERE CRM_User.Name=:username
USING SQLCA;

if SQLCA.SQLCode=0 then
if trim(password)=trim(sle_password.text) then
open(w_main)
close(parent)
else
//如果密码不正确的话,会执行到这里。
messagebox("客户关系管理","您的密码错误",Exclamation!,ok!)
sle_password.text=""
sle_password.setfocus()
//点了确定以后,光标在sle_password内,但是输入无效,
//点击该控件也无效,只有先点其它控件,再点它才能输入,请问这是为什么?
end if
else
messagebox("客户关系管理","您的用户名错误",Exclamation!,ok!)
sle_username.text=""
sle_password.text=""
sle_username.setfocus()
end if

//谢谢
...全文
6 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zzhouj 2002-03-13
在家调试的时候有这个毛病,但是到了公司就没了。
还有
在单行编辑框sle_username内输入用户名,按回车,焦点移到单行编辑框sle_password上,方法是在sle_username的modified事件脚本中写入:

if keydown(13) then sle_password.setfocus()

再输入密码,再按回车,触发命令按钮cb_ok的clicked事件,方法是在sle_password的modified事件脚本中写入:

if keydown(13) then cb_ok.triggerevent(clicked!)

把以上两个脚本改放在other事件中时,在sle_username输入完,按回车时,会执行非法操作,不知什么原因?
回复
sorrow_arrow 2002-03-13
我认为可能的原因就是你的MESSAGEBOX截获了焦点,因此虽然光标在SLE_PASSWORD里面,但是就是不能写入,不信,你注释掉MESSAGEBOX试试
回复
zhanwei 2002-03-13
在sle_password的getfocus事件下加入:
This.SelectText(1, Len(This.Text))
就不用如下代码了:
sle_password.text=""
回复
zhanwei 2002-03-13
......
//如果密码不正确的话,会执行到这里。
messagebox("客户关系管理","您的密码错误",Exclamation!,ok!)
//
parent.setfocus()//加入此条试一试
//
sle_password.text=""
sle_password.setfocus()
//点了确定以后,光标在sle_password内,但是输入无效,
//点击该控件也无效,只有先点其它控件,再点它才能输入,请问这是为什么?
end if
else
messagebox("客户关系管理","您的用户名错误",Exclamation!,ok!)
sle_username.text=""
sle_password.text=""
sle_username.setfocus()
end if


回复
fzymr 2002-03-12
在窗口的key事件中写如下代码实现焦点的转换:



GraphicObject lcnt_control
string ls_control_name


lcnt_control = GetFocus()

IF KeyDown(KeyEnter!) THEN

CHOOSE CASE ClassName(lcnt_control)

CASE "sle_user"
sle_password.SetFocus()

CASE "sle_password"
cb_ok.TriggerEvent(Clicked!)
//cb_ok的clicked事件中进行用户密码的校验

CASE "cb_ok"
cb_ok.TriggerEvent(Clicked!)

CASE "cb_cancel"
cb_cancel.TriggerEvent(Clicked!)
//退出程序的程序
END CHOOSE

END IF

IF KeyDown(KeyEscape!) THEN
cb_cancel.TriggerEvent(Clicked!)
END IF
回复
相关推荐
发帖
PowerBuilder
创建于2007-09-28

856

社区成员

PowerBuilder 相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-03-12 11:12
社区公告
暂无公告