请教一个登陆框的问题
我在做登陆框的时候,想在如果输入的密码错误,重新DoModal(),但是我写的代码不知道为什么在第二次循环时就显示错误? 各位大虾帮忙看看。
CString user;
CPasSet m_pasSet;
CPasDlg m_pasDlg;
m_pasSet.Open();
while(sel){
if((m_pasDlg.DoModal() == IDOK) && (sel != 3)){
user = m_pasDlg.m_user2;
m_pasSet.m_strFilter.Format("users = '%s'",user);
m_pasSet.Requery();
if(m_pasSet.IsEOF()){
AfxMessageBox("请选择一个用户登陆");
a=0;
}
if(user == m_pasSet.m_users){
if(m_pasDlg.m_password == m_pasSet.m_code){
userID = m_pasSet.m_ID;
sel = 0;
break;
}
else{
AfxMessageBox("密码错误,请重新输入");
sel++;
}
}
}
else if(sel == 3){
AfxMessageBox("密码输入错误3次,程序将自动关闭");
exit(-1);
}
else
exit(-1);
}
m_pasSet.Close();
问题点数:40、回复次数:12Top
1 楼38062708(土豆精)回复于 2004-12-01 09:00:42 得分 0
第二次出现错误问题出在 ADO 的记录集上吧,你跟踪看看Top
2 楼happyparrot(快乐鹦鹉)回复于 2004-12-01 09:03:19 得分 0
先调整一下代码风格,你的程序难以看清楚括号的对应关系。
CString user;
CPasSet m_pasSet;
CPasDlg m_pasDlg;
m_pasSet.Open();
while(sel)
{
if((m_pasDlg.DoModal() == IDOK) && (sel != 3))
{
user = m_pasDlg.m_user2;
m_pasSet.m_strFilter.Format("users = '%s'",user);
m_pasSet.Requery();
if(m_pasSet.IsEOF())
{
AfxMessageBox("请选择一个用户登陆");
a=0;
}
if(user == m_pasSet.m_users)
{
if(m_pasDlg.m_password == m_pasSet.m_code)
{
userID = m_pasSet.m_ID;
sel = 0;
break;
}
else
{
AfxMessageBox("密码错误,请重新输入");
sel++;
}
}
}
else if(sel == 3)
{
AfxMessageBox("密码输入错误3次,程序将自动关闭");
exit(-1);
}
else
exit(-1);
}
m_pasSet.Close();Top
3 楼happyparrot(快乐鹦鹉)回复于 2004-12-01 09:03:52 得分 0
然后有错误你应该自己调试阿。加上断点,看看第二次是哪个语句发生错误。Top
4 楼xiaoqi206(神奇小猪)回复于 2004-12-01 09:05:23 得分 0
为什么我把 if(m_pasDlg.DoModal() == IDOK && sel != 3) 里面的内容都注释掉还是会出错的?Top
5 楼happyparrot(快乐鹦鹉)回复于 2004-12-01 09:09:13 得分 0
while(sel){
if((m_pasDlg.DoModal() == IDOK) && (sel != 3))
{
}
就这样也错?Top
6 楼happyparrot(快乐鹦鹉)回复于 2004-12-01 09:09:44 得分 30
是不是你的m_pasDlg对话框里面用到了什么特殊的操作Top
7 楼xiaoqi206(神奇小猪)回复于 2004-12-01 09:11:38 得分 0
没有啊 ,只加了
BOOL CPasDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化
m_brush.CreateSolidBrush(RGB(255,255,255));
m_pic.SubclassDlgItem(IDC_LOGON,this);
CPasSet m_pasSet;
if(!m_pasSet.IsOpen())
m_pasSet.Open();
while(!m_pasSet.IsEOF()){
m_user.AddString(m_pasSet.m_users);
m_pasSet.MoveNext();
}
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
HBRUSH CPasDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
//HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何属性
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return m_brush;
}Top
8 楼xiaoqi206(神奇小猪)回复于 2004-12-01 09:13:28 得分 0
呵呵,果然是,把这句注释掉就可以了,但是为什么不能用呢?
m_brush.CreateSolidBrush(RGB(255,255,255));Top
9 楼960379(文物:眉毛搭桥)回复于 2004-12-01 09:47:52 得分 10
在create之前先将其设为nullTop
10 楼xiaoqi206(神奇小猪)回复于 2004-12-01 10:10:41 得分 0
结贴了 谢谢各位Top
11 楼captainwh(wh)回复于 2004-12-01 10:11:32 得分 0
密码错误了为什么要重新DoModol() ? 直接不终止对话框就行了啊Top
12 楼loki2k(loki)回复于 2004-12-01 10:15:14 得分 0
m_brush.CreateSolidBrush(RGB(255,255,255));
m_brush.CreateSolidBrush(RGB(255,255,255));
m_brush.CreateSolidBrush(RGB(255,255,255));
你想每次都CreateSolidBrush,这样能行吗?Top




