在一个对话框上增加一个ComboBox控件,Styles Type drop down,sort不选。在date中增加中国北京、中国。为其关联一个CString m_strName。
再增加一个按钮,在点击按钮调用的函数中增加如下两行。
UpdateData(TRUE);
UpdateData(FALSE);程序运行后,在下拉列表中选择“中国”,然后点击按钮,这时问题出现了,ComboBox控件的edit位置变为“中国北京”。
请问有什么办法可以解决这个问题?

解决方案 »

  1.   

    int SetItemData(
       int nIndex,
       DWORD_PTR dwItemData 
    );索引值是int
      

  2.   

    UpdateData(TRUE);
    UpdateData(FALSE); 汗,这两句一起用你想干啥
      

  3.   

    改用以下即可,更新 m_strNameUpdateData(TRUE);
      

  4.   

    设置一个int类型的成员变量(如 i),用来保存你先前选下拉列表得序列值,i=m_comb.GetCurSel();
    点击按钮调用的函数中增加:
    m_comb.SetCurSel(i);//设置你刚刚选的下拉列表值
      

  5.   

    一定是UpdateData(FALSE),将m_strName更新到了Edit in combobox
      

  6.   

    这可以说是MFC的一个bug,在UpdateData的时候,MFC在ComboBox中查找以“中国”开头的第1个选项,然后设置选中。
    如果你要设置ComboBox中选中的选项,可以自己调用CComboBox的SetCurSel函数,利用索引来设置。如果只有string而不知道索引,可以自己FindString,然后对比。
      

  7.   

    原因:UpdateData(FALSE);  执行时会向 CombooBox 发送 CB_SELECTSTRING 消息如果前缀相同,结束查找所以会出问题不过 lz 的是用法不当
      

  8.   

    参看下面文章:
    http://www.joyvc.cn/GuiAndWindows/GuiAndWindowsGroup00221.html
      

  9.   

    UpdateData(TRUE); 
    UpdateData(FALSE); 
    这样写只是为了演示效果。
    实际上中间是有别的处理过程。比如取得当前控件上设置的内容,设置到其它的控件上去。
    UpdateData(TRUE); 
    ...
    UpdateData(FALSE); 
      

  10.   

    你可以把ComboBox定义为CComboBox m_box类型,另外定义一个变量 CString str;
    获取内容可以用m_box.GetLBText(m_box.GetCurSel(), str);
      

  11.   

    void CFffDlg::OnButton2() 
    {
    // TODO: Add your control notification handler code here CComboBox *comb=(CComboBox *)GetDlgItem(IDC_COMBO1);
     int i=comb->GetCurSel(); 
     UpdateData(TRUE); 
     UpdateData(FALSE); 
     comb->SetCurSel(i);
    }
      

  12.   

    UpdateData(true);//用于将屏幕上控件中的数据交换到变量中。 
    UpdateData(false);//用于将数据在屏幕中对应控件中显示出来。
    当你使用了ClassWizard建立了控件和变量之间的联系后:当你修改了变量的值,而希望对话框控件更新显示,就应该在修改变量后调用UpdateData(FALSE);如果你希望知道用户在对话框中到底输入了什么,就应该在访问变量前调用UpdateData(TRUE)。
    这两个要清楚使用啊。