读书人

输入密码后在执行程序失误

发布时间: 2013-01-01 14:04:19 作者: rapoo

输入密码后在执行程序出错
没有用进程,程序想实现的是功能是:用户删除某条记录时跳出一个form要求输入密码,点击确认后form关闭,如果密码正确,记录允许删除,如果不正确,form再次跳出;
我的方法是在form1中设了个全局变量为mm(密码),用户删除记录时form2采用ShowModal()的方式弹出,输入密码点击确认后,在form2的按钮事件中我是这样写的:


Form1->mm = edt1->Text;
this->Close();
Form1->N1Click(Application);//返回到form1中的删除按钮;


在form1中的删除按钮(N1Click)中我有这样的判断:

if(mm == "123")
{...}
else
{
form2->ShowModal();
}

个人认为这样的循环没有错啊,删除时要求密码,跳出窗口输入,正确了执行删除,不正确继续跳出窗口;
可是报的是地址错误,而且好像没法在form2中给form1中mm赋值(肯定包含了form),并且报错按确定后程序好像死了似的要等好久才恢复,我的逻辑有错吗?
请指点下;
[解决办法]
这样写就行:

void CheckPassword(const char *szPassword) {
TFormCheckPassword *form = new TFormCheckPassword(this, szPasswsord);
do {
form->ShowModal();
} while ( !form->PasswordOk() );
delete form;
}
TFromCheckPassword : public TForm {
private :
char m_szPassword[MAX_PASSWORD_LEN];
bool m_bPasswordOk;
public :
TFromCheckPassword(TComponent *Owner, const char *p_szPassword);
bool PasswordOk() { return m_bPasswordOk; }
....
};

[解决办法]
或者直接在TFormCheckPassword里面判断

void TFormCheckPassword::bnOkClick(.... ) {
m_bPasswordOk = strcmp(m_szPassword, edPassword->Text.t_str()) == 0;
if ( m_bPasswordOk )
ModalResult = mrOk;
else {
MessageBox(this->Handle, "密码错误", "提示", MB_OK
[解决办法]
MB_EXCLAMATION);
edPassword->SetFocus();
}

读书人网 >C++ Builder

热点推荐