通过为组合框提供条件来将启用更改为禁用内容

Changing the enabling to disabling content by giving condition to combo box

我在组合框中有特定的选择。根据该选择,某些项目需要 enabled/disabled。但是我无法这样做。还有一个问题是,一旦选择了一个选项,我无法在没有退格键的情况下将其更改为另一个选项,然后再次输入该选项。

m_d_lvlayers是组合框IDC的变量。它的类型是 CString.

void CThermalToolDlg::OnCbnSelchangeLvLayers()
{
// TODO: Add your control notification handler code here
if (m_d_lvlayers == "2" )
{
    UpdateData();
    GetDlgItem(IDC_LV3_CU)->EnableWindow(0);
    GetDlgItem(IDC_LV3_ICI)->EnableWindow(0);
            //etc etc

    UpdateData(0);
}
else if (m_d_lvlayers == "3")
{
    UpdateData();
    GetDlgItem(IDC_LV3_CU)->EnableWindow(1);
    GetDlgItem(IDC_LV3_ICI)->EnableWindow(1);
            //etc etc

    UpdateData(0);
}
else
{
    UpdateData();
    GetDlgItem(IDC_LV3_CU)->EnableWindow(1);
    GetDlgItem(IDC_LV3_ICI)->EnableWindow(1);
    //etc etc

    UpdateData(0);
}

}

我希望在组合框中获得正确的选择以及相应的启用和禁用。

您需要先致电UpdateData(TRUE);

bSaveAndValidate

Flag that indicates whether dialog box is being initialized (FALSE) or data is being retrieved (TRUE)

void CThermalToolDlg::OnCbnSelchangeLvLayers()
{
    UpdateData(TRUE); // Controls to Variables

    if (m_d_lvlayers == "2" )
    {
        GetDlgItem(IDC_LV3_CU)->EnableWindow(FALSE);
        GetDlgItem(IDC_LV3_ICI)->EnableWindow(FALSE);
        //etc etc
    
        UpdateData(FALSE);
    }
    else if (m_d_lvlayers == "3")
    {
        GetDlgItem(IDC_LV3_CU)->EnableWindow(TRUE);
        GetDlgItem(IDC_LV3_ICI)->EnableWindow(TRUE);
                //etc etc
    
        UpdateData(FALSE);
    }
    else
    {
        GetDlgItem(IDC_LV3_CU)->EnableWindow(TRUE);
        GetDlgItem(IDC_LV3_ICI)->EnableWindow(TRUE);
        //etc etc
    
        UpdateData(FALSE);
    }
}

尽管在您的代码中调用 UpdateData(FALSE); 没有任何意义,因为您所做的只是将控件 window 状态设置为启用。