我目前正在与MFC合作,我想做一个简单的帐户管理。
我创建了一个登录按钮,从开始和2编辑框设置为禁用,每个编辑框都是用户ID和密码。
我想做一件简单的事情:如果其中一个编辑框根本没有值,则禁用loggin按钮,否则..使按钮可用。
但是,代码根本不起作用。
这是代码:
头文件的一部分
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
private:
// Value of the "Username" textbox
CString m_CStr_UserID;
// Control variable of the "Username" textbox
CEdit m_CEdit_ID;
// Value of the "Password" textbox
CString m_CStr_UserPass;
// Control variable of the "Password" textbox
CEdit m_CEdit_PASS;
// Control variable of the "Login" button
CButton m_Btn_Login;
public:
afx_msg void OnEnChangeEditId();
afx_msg void OnEnChangeEditPass();
进入.cpp
.....
void CTestDlg::OnEnChangeEditId()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
m_CEdit_ID.GetWindowTextW(m_CStr_UserID);
if(!m_CStr_UserID.IsEmpty() && !m_CStr_UserPass.IsEmpty())
m_Btn_Login.EnableWindow(TRUE);
m_Btn_Login.EnableWindow(FALSE);
}
void CTestDlg::OnEnChangeEditPass()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
m_CEdit_PASS.GetWindowTextW(m_CStr_UserPass);
if(!m_CStr_UserPass.IsEmpty() && !m_CStr_UserID.IsEmpty())
m_Btn_Login.EnableWindow(TRUE);
m_Btn_Login.EnableWindow(FALSE);
}
代码出了什么问题?
答案 0 :(得分:1)
在两个处理程序中,它总是被启用为FALSE。我想你错过了else
您需要在EnableWindow(TRUE)之后return
或使用else
。
答案 1 :(得分:0)
acraig5057解释了您的代码问题并向您展示了如何解决它。我只想补充一点,你也可以这样做:将两个编辑控件的EN_CHANGE映射到一个处理程序,让我们称之为OnEnChangeEditIdOrPass:
void CTestDlg::OnEnChangeEditIdOrPass()
{
m_Btn_Login.EnableWindow((m_CEdit_ID.GetWindowTextLength() != 0) &&
(m_CEdit_PASS.GetWindowTextLength() != 0));
}
函数GetWindowTextLength
返回指定编辑控件中的字符数,如果编辑控件为空,则返回0。
上述代码的逻辑是:如果两个编辑框中都包含字符,则&&将返回TRUE
并启用登录按钮。如果其中至少有一个没有,那么&&将返回FALSE
,登录按钮将被禁用。
当然,这段代码不将用户名和密码编辑控件的值保存到字符串变量中,就像代码一样,但是你总是可以从登录按钮的处理程序中调用GetWindowText