首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

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

2013-01-01 
输入密码后在执行程序出错没有用进程,程序想实现的是功能是:用户删除某条记录时跳出一个form要求输入密码,

输入密码后在执行程序出错
  没有用进程,程序想实现的是功能是:用户删除某条记录时跳出一个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();
    }

热点排行