今天是使用combo box实现:根据选择值不同,控制另一个控件的启用停用。例如:选择1时启用,2或者3时停用。
选择CBN_SELECHANGE消息
以下为实现(有问题)
void CAccOpen::OnSelchange()
{
// TODO: Add your control notification handler code here
CString l_cstrList;
((CComboBox*)GetDlgItem(IDC_DRAW_TYPE))->GetWindowText(l_cstrList);
if( l_cstrList[0]=='1' )
{
GetDlgItem( IDC_ACC_PWD )->EnableWindow( true );
GetDlgItem( IDC_ACCPWD )->EnableWindow( true );
}
else
{
GetDlgItem( IDC_ACC_PWD )->EnableWindow( false );
GetDlgItem( IDC_ACCPWD )->EnableWindow( false );
}
}
发现一般选择2时才启用,选择3或者1时停用,跟踪了一下,发现
((CComboBox*)GetDlgItem(IDC_DRAW_TYPE))->GetWindowText(l_cstrList);
中得到l_cstrList有滞后性,是上一个值,非当下值。
修改成如下实现即可:
int iPos=((CComboBox*)GetDlgItem(IDC_DRAW_TYPE))->GetCurSel();
((CComboBox*)GetDlgItem(IDC_DRAW_TYPE))->GetLBText(iPos,l_cstrList);
if( l_cstrList[0]=='1' )
{
GetDlgItem( IDC_ACC_PWD )->EnableWindow( true );
GetDlgItem( IDC_ACCPWD )->EnableWindow( true );
}
else
{
GetDlgItem( IDC_ACC_PWD )->EnableWindow( false );
GetDlgItem( IDC_ACCPWD )->EnableWindow( false );
}
选择消息CBN_SELENDOK 进行实现效果一样。

本文介绍如何使用Combobox控件实现根据不同选项控制其他控件的启用或停用状态,并解决选项更改时控件状态更新滞后的问题。
1万+

被折叠的 条评论
为什么被折叠?



