在对话框中添加了几个combox控件,
想实现的功能是当选择其中一个控件的选项时,
其余的控件的选项内容要跟着改变。
例如 有两个控件,一个是极性,可选项为:单极、双极
另一个控件是数目,可选项为1-16。
当选择单极时,数目的可选项要为1-7
当选择双极时,数目的可选项应为8-16
请教各位高手该如何这样实现呢?  非常感谢!!!

解决方案 »

  1.   

    通常是Clear然后重新AddString;
    也可以对每一种情况分别构造一个控件,不用的时候先隐藏,用的时候再显示。
      

  2.   

    应该不复杂,响应CComboBox的selectedchanged消息,然后得到文本GetLBText(cursel, text), 然后根据text是单及还是双极,来执行对应的ComboBox事件.
      

  3.   

    还有一处不明白的地方就是控件的下拉菜单是在OnInitDialog()里面添加进去的,那么该在哪里做如上所说的clear 和 响应selectedchange消息呢?
      

  4.   

    在OnDialogInit()函数中先添加了所有的通道,并选择了一个作为默认选项
    在classwizard中添加了ComboBox控件的CBN_SELCHANGE响应,
    在对应的函数中
    添加代码如下:
           CString str;
    GetDlgItem(IDC_DMM_MODE)->GetWindowText(str);
    if(str == "单极")
    {
    m_channel.Clear();
    m_channel.AddString("通道0");
    m_channel.AddString("通道1");
    m_channel.AddString("通道2");
    m_channel.AddString("通道3");
    m_channel.AddString("通道4");
    m_channel.AddString("通道5");
    m_channel.AddString("通道6");
    m_channel.AddString("通道7");
           }
           if(str == "双极")
           {
    m_channel.AddString("通道8");
    m_channel.AddString("通道9");
    m_channel.AddString("通道10");
    m_channel.AddString("通道11");
    m_channel.AddString("通道12");
    m_channel.AddString("通道13");
    m_channel.AddString("通道14");
    m_channel.AddString("通道15");
           }可是发现,消息响应后,是在原来的基础上增加了通道
    而并没有将原来从0-15的通道选项删除,
    该怎么办呢??  困惑中....
      

  5.   

    DeleteString(     int       index)
    删除
      

  6.   

    奇怪啊,添加了DeleteString(),
    为了测试将所有的选项都删除了,
    可是发现怎么选中后,删除的是偶数的通道,
    而且没变换一次,通道数目就会少一半,
    多选择几次极性的控件选择,通道数才会完全都删除掉
    这是怎么回事呢???
      

  7.   

    在OnDialogInit()中
    m_mode.AddString("单极");//模式的两个选项
    m_mode.AddString("差分");
    m_mode.SetCurSel(0); m_channel.AddString("通道0");//通道的16个选项
    m_channel.AddString("通道1");
    m_channel.AddString("通道2");
    m_channel.AddString("通道3");
    m_channel.AddString("通道4");
    m_channel.AddString("通道5");
    m_channel.AddString("通道6");
    m_channel.AddString("通道7");
    m_channel.AddString("通道8");
    m_channel.AddString("通道9");
    m_channel.AddString("通道10");
    m_channel.AddString("通道11");
    m_channel.AddString("通道12");
    m_channel.AddString("通道13");
    m_channel.AddString("通道14");
    m_channel.AddString("通道15");在CWinCltDlg::OnSelchangeDmmMode() 中
    CString str;
    GetDlgItem(IDC_DMM_MODE)->GetWindowText(str);
    if(str == "单极")
    {
    m_channel.DeleteString(0);
    m_channel.DeleteString(1);
    m_channel.DeleteString(2);
    m_channel.DeleteString(3);
    m_channel.DeleteString(4);
    m_channel.DeleteString(5);
    m_channel.DeleteString(6);
    m_channel.DeleteString(7);
    m_channel.DeleteString(8);
    m_channel.DeleteString(9);
    m_channel.DeleteString(10);
    m_channel.DeleteString(11);
    m_channel.DeleteString(12);
    m_channel.DeleteString(13);
    m_channel.DeleteString(14);
    m_channel.DeleteString(15);                m_channel.AddString("通道0");
    m_channel.AddString("通道1");
    m_channel.AddString("通道2");
    m_channel.AddString("通道3");
    m_channel.AddString("通道4");
    m_channel.AddString("通道5");
    m_channel.AddString("通道6");
    m_channel.AddString("通道7");
              }
               if(str == "差分")
    {
    m_channel.DeleteString(0);
    m_channel.DeleteString(1);
    m_channel.DeleteString(2);
    m_channel.DeleteString(3);
    m_channel.DeleteString(4);
    m_channel.DeleteString(5);
    m_channel.DeleteString(6);
    m_channel.DeleteString(7);
    m_channel.DeleteString(8);
    m_channel.DeleteString(9);
    m_channel.DeleteString(10);
    m_channel.DeleteString(11);
    m_channel.DeleteString(12);
    m_channel.DeleteString(13);
    m_channel.DeleteString(14);
    m_channel.DeleteString(15);                m_channel.AddString("通道8");
    m_channel.AddString("通道9");
    m_channel.AddString("通道10");
    m_channel.AddString("通道11");
    m_channel.AddString("通道12");
    m_channel.AddString("通道13");
    m_channel.AddString("通道14");
    m_channel.AddString("通道15");
             }
    通过DeleteString()不是把原有的都删除了么?
    可是编译运行后却发现只是删除了一部分,新增加的到是都添加进去了
      

  8.   

    看了代码有想笑的冲动
    DeleteAllStrings();删除所有
    干干净净
    DeleteString()
    删除INDEX后,INDEX重新排列
    例如
    m_channel.DeleteString(0); 
    m_channel.DeleteString(1); 
    就是删除0项后,排列后
    这时候删除的1就是原来的第三项::(当前第二项)
      

  9.   

    {CComboBox::ResetContent();switch()
    {
    case:
        CComboBox::AddString();
        break;
    default:
        break;
    }}
      

  10.   

    不好意思,combo是
    .Clear();
      

  11.   

    不好意思,我以为是list呢
    -----------------------
    - -!!!误导了我
    用while(次数)DeleteString(0) 
      

  12.   

    while( m_channel.DeleteString(0))
      

  13.   

    多谢诸位!
    用CComboBox::ResetContent(); 
    也可用m_channel.DeleteString(0)
    散分!