对话框类CMyDlg上生成CListCtrl控件,并创建与控件关联的该类的公有变量m_ListCtrl;然后再另外一个类CMyOther中给控件插入值,做如下调用
CMyOther
{  CMyDlg dlg;
    CString s="hello";
    dlg.m_ListCtrl.SetItemText(0,0,s)  ;
   }
编译无误,运行时会出现Debug Asseration failed...对话框,请教为什么,如何修改

解决方案 »

  1.   

    补充一下,我的CListCtrl已经连接至数据库的一个表,和这有关系吗?
      

  2.   

    CMyDlg dlg;只是建立对象,但是对话框窗口却没有建立啊。
     dlg.m_ListCtrl.SetItemText(0,0,s) ;
    那你又如何能操作上面的控件!解决的方法如:
    CMyDlg有成员变量: CStringList m_strlist;
    在CMyDlg OnInitialDialog中 将m_strlist填充到m_ListCtrl中!
    那么:
    CMyDlg dlg;
    dlg.m_strlist.Add(...)
    dlg.DoModal();
      

  3.   

    Debug Asseration failed...应该有行号吧?
      

  4.   


    也可在dlg.DoModal()之前利用PostMessage(...)
      

  5.   

    没太看懂是把m_strlist填充到m_ListCtrl中,还是在OnInitialDialog中把m_ListCtrl填充到m_strlist中?我不是要弹出对话框阿,而是在另一个类中引用m_ListCtrl,当然在引用该变量往控件插入值之前,对话框是已经谈出来的。
      

  6.   

    CMyDlg dlg;
    CString s="hello";
    dlg.m_ListCtrl.SetItemText(0,0,s);
    就这样对话框弹出来了吗?
      

  7.   

    >CMyDlg dlg;只是建立对象,但是对话框窗口却没有建立啊。
    >dlg.m_ListCtrl.SetItemText(0,0,s) ;
    >那你又如何能操作上面的控件!
    ListCtrl还没成型,可放到OnInitDialog中处理
      

  8.   

    请问你这个变量CMyDlg dlg和已经弹出来的对话框之间有什么关系呢?
      

  9.   

    可能是我没把问题表述清楚,对话框是CMainFrame下一个按钮定义了COMMAND弹出的,为该对话框建的类就是CMyDlg,然后在该类上添加控件CListCtrl,并关联变量m_ListCtrl,CMyDlg类初始化函数里已经连接并显示数据库中的一个表中内容于控件CListCtrl中;
    现在,在我另外自己定义的一个类中,完成一些操作后,需要写入CListCtrl中一些值,因此就是我的问题,在另外一个类中 写入CListCtrl,才需要引用关联变量m_ListCtrl。而该变量是定义在CMyDlg类里的;所以才有我上面的问题;
    多谢各位分析,只是我接触vc时间不长,因此再请详细指点一下
      

  10.   

    那就不要这样了:
    CMyDlg dlg; 
    CString s="hello";
    dlg.m_ListCtrl.SetItemText(0,0,s);获取已弹出的CMyDlg类窗口的句柄(指针也行),然后通过发送消息来处理。
    或者是CMyDlg类对象的指针,直截pMyDlg->m_ListCtrl.SetItemText(0,0,s);指针或句柄怎么取得就看你怎么安排了。
      

  11.   

    我在其他类中这样获得ctrl list的指针,请看一下有无问题
             CString s="hello";
             CListCtrl* list;
    list=(CListCtrl *)GetDlgItem(IDC_LIST1);//IDC_LIST1是列表控件的ID
             list->SetItemText(0,4,s);
    运行后依然会出现Debug Assertion failed。。
      

  12.   

    IDC_LIST1是CMyDlg的控件,那你怎么能够在其它类中GetDlgItem(IDC_LIST1);不妨这样:
    class CMainFrame
    {
    ...
    protected:
    CMyDlg m_pMyDlg;//构造函数中设为NULL;
    public:
    CMyDlg *GetMyDlg(){ return m_pMyDlg; }
    ...
    }
    "对话框是CMainFrame下一个按钮定义了COMMAND弹出的"
    这样弹出:
    OnMyMsg(..)
    {
        if (!m_pMyDlg)
        {
           m_pMyDlg = new CMyDlg;
           m_pMyDlg->DoModal();
           delete m_pMyDlg;
           m_pMyDlg = NULL;
         }
    }那么你可以在任何类中获取指向CMyDlg的指针:
    CMyDlg *pMyDlg = ((CMainFrame*)AfxGetMainWnd())->GetMyDlg(); 
    if (pMyDlg)
    {
       //process
    }
      

  13.   

    跟正:
    ...
    protected:
    CMyDlg* m_pMyDlg;//构造函数中设为NULL;
    ...
      

  14.   

    OnMyMsg()中m_pMyDlg可以直接用吗,需要定义CMainFrame 对象,再用 对象.m_pMyDlg 使用吗?
    我按照你说的改了OnMyMsg(),可以不会弹出对话框了,而且m_pMyDlg->DoModal,时没有智能提示出
    DoModal阿,thanks for ur reply!