/********************************************************/
//初始化checkbox的状态
/********************************************************/
m_GroupRight=m_hDataBase.VariantsToCString(value[2]); CButton  *m_pcheck[36];   //类成员   
CString str; if(m_GroupRight!="")
{
for(int i=0;i<36;i++)
{
m_pcheck[i] = (CButton*)GetDlgItem(IDC_CHECK+i); //将36个checkbox控件存入数组中

str=m_GroupRight.Mid(i,1);

if(str=='1')
{
m_pcheck[i]->SetCheck(TRUE);
}
else
m_pcheck[i]->SetCheck(FALSE);
}
}
这段代码我跟踪了很多次,还是不行。

解决方案 »

  1.   

    http://photo.store.qq.com/rurl2=cd0c71cb0f18762faecb73ca741690359432bfba17330bd13df4ee4cchttp://photo.store.qq.com/rurl2=ad96ec19502251650fdba7eec08de41b6ca7e2c51b38d1c817a714c12
      

  2.   

    SetCheck的参数用BST_CHECKED、BST_UNCHECKED,不要用TRUE、FALSE。
      

  3.   

    估计这个IDC_CHECK+i里面有问题吧,看看resource.h里面IDC_CHECK值后面的35个控件ID是不是都是CButton类型的
      

  4.   

      if( str == "1" )
    字符串比较  1不应是字符
      

  5.   

    IDC_CHECK+i,这个的值没有对应 。错开了!本来应该是第一第二个想让它选中,可是却变成了第一和第三个选中了!IDC_CHECK它有一个值加了i之后IDC_CHECK所代表的值应该是连续的,但是我的程序里面的值是不连续的。所以问题的根源在这,怎么去修改IDC_CHECK1,IDC_CHECK2........这里的值呢?
      

  6.   

    如果到resource.h修改的话,程序就会异常!请问该怎么改呢?
      

  7.   

    程序已解决!确实是到resource.h修改ID的值,不过值得注意的是ID的值不能被其他的控件占用,只能是唯一的ID值。
      

  8.   


    在你的代码中:
    str=m_GroupRight.Mid(i,1); //你在这里直接操作,而不进行边界检查;
                   //你确保m_GroupRight中的串长度一定大大于36吗?不防试试改成:
      if(36<=m_GroupRight.GetLeng())
            str=m_GroupRight.Mid(i,1);