我用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 希望各位可以帮我找出错误原因,并指点一个解决的办法。
拜托了拜托了,感谢感谢。
我应该怎样做,才可以将它们变成一个控件数组呢? 在网上找到一种解决办法:
先在窗体类中定义一个数组,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 希望各位可以帮我找出错误原因,并指点一个解决的办法。
拜托了拜托了,感谢感谢。
如果改成DDX_Text,再要用
SetDlgItemText(cs[i],"abc");
也会去问题。 希望得到您进一步的帮助,谢谢。
你使用错了,正确的方法应该是
SetDlgItemText(Edit1,"abc");
Edit1是你的控件ID,而你使用cs[i]是不对的,它是一个CString类型。看看MSDN的解释。
因为你已经用DDX_Text绑定了控件与字符串之间的关系,所以要设置Edit1的内容为“aaa”只需要
cs[0]="aaa";
UpdateData(FALSE);
即可;要读取Edit1的值,只需要:
UpdateData(TRUE);
MessageBox(cs[0]);
即可。
窗体上放有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);
}