OnKillFocus вызывается дважды - PullRequest
0 голосов
/ 10 июня 2019

У меня есть одно диалоговое окно, где оно состоит из 3 блоков EditControl и 2 для проверки ввода данных.Когда Editcontrol теряет фокус, мы проверяем введенные данные с помощью метода OnKillFocus и сталкиваемся с проблемой зависания из-за многократного вызова OnKIllFocus, после этого мы отделяем каждый KillFocus для каждого Editcontrol, но также мы сталкиваемся с одной и той же проблемой, вызывающей KillFocus несколько раз

`BEGIN_MESSAGE_MAP(CWHPwdDlg, CDialog)
    ON_BN_CLICKED(IDOK, OnOK)
    ON_BN_CLICKED(IDCANCEL, OnCancel)
    ON_WM_CTLCOLOR()
    ON_EN_KILLFOCUS(IDC_HMI_SERVERNAME, OnKillFocusServerNameTextBox)
    ON_EN_KILLFOCUS(IDC_WH_RT_PORT, OnKillFocusPortTextBox)
    ON_EN_KILLFOCUS(IDC_HMI_USERNAME, OnKillFocusUserNameTextBox)
    ON_EN_KILLFOCUS(IDC_HMI_PASSWORD, OnKillFocusPwdTextBox)
    ON_BN_CLICKED(IDC_WH_RT_TEST_CONNECTION, OnTestConnection)
    ON_BN_CLICKED(IDC_WH_RT_VIEW_CERT, OnViewCertificate)
    ON_BN_CLICKED(IDC_WH_RT_REQUIRE_TRUST, OnCheckEnableTrust)
END_MESSAGE_MAP()


void CWHPwdDlg::OnKillFocusServerNameTextBox()
{
    MessageBoxA(NULL, "Click", "Servername", MB_OK);
    if (!UpdateData(TRUE)) {
        return;
    }

    CWnd* pWndOk = GetDlgItem(IDOK);

    //if (m_hmiServerName.IsEmpty())
    if(m_hmiServerName.GetLength()<=0)
    {
        m_TestConnection.EnableWindow(FALSE);

        SetDlgItemText(IDC_WH_RT_TRUSTED_MSG, _T(""));
        CWnd* p_CertificateButton = GetDlgItem(IDC_WH_RT_VIEW_CERT);
        if (p_CertificateButton != NULL)
            p_CertificateButton->EnableWindow(FALSE);
        CWnd* pTrustCheck = GetDlgItem(IDC_WH_RT_REQUIRE_TRUST);
        if (pTrustCheck != NULL)
            pTrustCheck->EnableWindow(FALSE);

        m_whErrorStr.SetWindowText(m_strServerNameError);
        m_whErrorStr.ShowWindow(SW_SHOW);
        m_whErrorIcon.ShowWindow(SW_SHOW);
        pWndOk->EnableWindow(FALSE);

        return;
    }
    else
    {

        SetCertificateAndEnableViewer();
    }
}


void CWHPwdDlg::OnKillFocusPortTextBox()
{
    MessageBoxA(NULL, "Click", "KillPort", MB_OK);

    if (!UpdateData(TRUE)) {
        return;
    }


    CWnd* pWndOk = GetDlgItem(IDOK);

    if (m_hmiPortNum.IsEmpty() || m_hmiPortNum == _T("0"))
    {
        m_whErrorStr.SetWindowText(m_strPortError);
        m_whErrorStr.ShowWindow(SW_SHOW);
        m_whErrorIcon.ShowWindow(SW_SHOW);
        pWndOk->EnableWindow(FALSE);
        //return FALSE;
    }

}

void CWHPwdDlg::OnKillFocusUserNameTextBox()
{
    MessageBoxA(NULL, "Click", "KillUserName", MB_OK);
    if (!UpdateData(TRUE)) {
        return;
    }


    CWnd* pWndOk = GetDlgItem(IDOK);

    if (m_hmiUserName.IsEmpty())
    {
        m_whErrorStr.SetWindowText(m_strUserNameError);
        m_whErrorStr.ShowWindow(SW_SHOW);
        m_whErrorIcon.ShowWindow(SW_SHOW);
        pWndOk->EnableWindow(FALSE);
        //  return FALSE;
    }

}

`

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...