我正在使用MFC ComboBox控件来更改某些参数,这些参数在可用的IP范围内具有选区(例如,仅/无广播IP)。
我需要调用范围修改功能两次以强制刷新显示的值:为什么?
One call to range modification
Two calls to range modification
void CIPAddressBugDlg::OnChangeCombo()
{
UpdateData(TRUE);
ChangeIPRange();
//ChangeIPRange();
}
void CIPAddressBugDlg::ChangeIPRange()
{
BYTE nField0, nField1, nField2, nField3;
if ( Combo.GetCurSel() )
{
IpAddress.GetAddress(nField0, nField1, nField2, nField3);
if ( nField0 < (BYTE) 224 )
nField0 = 224;
IpAddress.SetAddress(nField0, nField1, nField2, nField3);
IpAddress.SetFieldRange(0, 224 , 232 );
}
else
{
IpAddress.GetAddress(nField0, nField1, nField2, nField3);
if ( nField0 >= (BYTE) 224 )
nField0 = 223;
IpAddress.SetAddress(nField0, nField1, nField2, nField3);
IpAddress.SetFieldRange(0, 0 , 223 );
}
}
Combo是一个ComboBox控件,IpAddress是一个CIPAddressCtrl。我正在编译运行Windows XP的VS C ++ 6.0(是的,我知道-_-)。
(如果需要,我也可以上传整个玩具项目)
答案 0 :(得分:1)
在第二次执行对UpdateData的调用之前,您不会更新编辑字段中的值。我不确定你为什么依赖于OnChangeCombo中的UpdateData,但是,这就是导致该字段更新的原因。尝试删除对UpdateData的调用,并添加对SetWindowText的调用,或者在ChangeIPRange()中使用等效的对话框命令来更新IP数据字段。
答案 1 :(得分:1)
这可能就像这样简单:
void CIPAddressBugDlg::OnChangeCombo()
{
UpdateData(TRUE);
ChangeIPRange();
UpdateData(FALSE);
}
ChangeIPRange
中所做的更改仅在您致电UpdateData(FALSE)
时更新为控件。
答案 2 :(得分:1)
尝试在SetFieldRange
之前移动SetAddress
Windows会忽略SetAddress
,因为它超出了范围。