我用VC做的基于对话框的程序,在对话框上放了许多编辑框,它们的ID是Edit1,Edit2…… 
我应该怎样做,才可以将它们变成一个控件数组呢? 在网上找到一种解决办法: 
先在窗体类中定义一个数组,CString  cs[20]; 
然后 
void CInterfaceDlg::DoDataExchange(CDataExchange* pDX) 

 CDialog::DoDataExchange(pDX); 
 //{{AFX_DATA_MAP(CInterfaceDlg) 
 DDX_Control(pDX, IDC_SetColor_BT, m_setcolor);/////////////////////////// 
 //}}AFX_DATA_MAP 
 DDX_Control(pDX, Edit1, cs[0]); 
 DDX_Control(pDX, Edit2, cs[1]); 
.......... 
} 可是这样的话,在///////////////////////////一行会出现编译错误: 
error C2664: 'DDX_Control' : cannot convert parameter 3 from 'class CString' to 'class CWnd &' 
        A reference that is not to 'const' cannot be bound to a non-lvalue 希望各位可以帮我找出错误原因,并指点一个解决的办法。 
拜托了拜托了,感谢感谢。

解决方案 »

  1.   

    非常感谢您的回复。 这个我也试过,可是,我的目是要在编辑框中显示文本的。 
    如果改成DDX_Text,再要用 
    SetDlgItemText(cs[i],"abc"); 
    也会去问题。 希望得到您进一步的帮助,谢谢。
      

  2.   

    DDX_Control绑定的是控件(Control)类型,而你要绑定的是Value类型,因此要使用DDX_Text
      

  3.   

    SetDlgItemText(cs[i],"abc");  
    你使用错了,正确的方法应该是
    SetDlgItemText(Edit1,"abc");  
    Edit1是你的控件ID,而你使用cs[i]是不对的,它是一个CString类型。看看MSDN的解释。
      

  4.   

    可问题就在这里呀。我就想用cs[i]数组,来控制编辑框的显示呀。 怎么办咧怎么办咧?
      

  5.   

    其实你不用这样的,,
    因为你已经用DDX_Text绑定了控件与字符串之间的关系,所以要设置Edit1的内容为“aaa”只需要
    cs[0]="aaa";
    UpdateData(FALSE);
    即可;要读取Edit1的值,只需要:
    UpdateData(TRUE);
    MessageBox(cs[0]);
    即可。
      

  6.   

    CString  cs[20];  -> CEdit cs[20];  
      

  7.   

    感觉这样关联控件是不是也很麻烦啊,一个9×9的数组,那不是要写81一个“DDX_Text(pDX, Edit1,cs[*][*]);”
      

  8.   

    不知道可不可以用for循环写个语句呢?Edit1直接写ID号?
      

  9.   

    我有一种方法,验证过了,可行,与大家分享下。
    窗体上放有5个编辑框,为他们设置控制变量m_edit1,m_edit2,m_edit3,...
    在适当的地方添加代码如下: CEdit* p[5];
     p[0]=&m_edit1;
     p[1]=&m_edit2;
     p[2]=&m_edit3;
     p[3]=&m_edit4;
     p[4]=&m_edit5;然后就可以访问了,如下所示: for(int i=0;i<5;i++)
     {
      CString str;
      str.Format("%d",i);
      p[i]->SetWindowText(str);
     }