我在一个对话框中加了一个CComboBox,可是在View中执行对话框的DoModel()之后,想在判断对话框返回的值为IDOK时,得到那个CComboBox的当前选项和文本,可是得到的CComboBox为空,我应该怎么做呢?

解决方案 »

  1.   

    那个CComboBox已经在对话框类中用DDX映射了一个变量了。
      

  2.   

    在OnSelChange消息中
    CString aa;
    m_combo2.GetLBText(m_combo2.GetCurSel(),aa);
    m_combo2是与你控件相连的控件类型变量
      

  3.   

    如果你的对话框管理类为CYouDlg
    与 CCombobox进行DDX的CString 为 m_strcmb
    那么你可以
    CYouDlg dlg;
    if(dlg.DoModal() == Idok)
    {
     MessageBox(dlg.m_strcmb);
    }
      

  4.   

    faint!本人写了一大坨,居然没显示出来!!!算了,简而言之
    if(dlg.domodal() == idok)
        Messagebox(dlg.m_strCmb);
      

  5.   

    这是在对话框类里吧!可是我想在View里得到,能办到么?是不是点击确定之后,就无法得到那个CComboBox了?
      

  6.   

    没看到我的吗?
    你还可以给你的combo加一个CString成员变量
    然后在OnOK时
    UpdateData(TRUE);
    不过只能得到用键盘打进去的值。
    要和上面我说的方法结合用才能有满意的效果。
      

  7.   

    先在对话框类的OnSelChange()里做一个全局变量保存GetLBText()取得的ComboBox的当前字符串,然后要在哪里显示就可以在哪里显示啦
      

  8.   

    您首先在确定的在 EndDialog(IDOK);之前还是之后你获取其中的数据?如果你在职 DOMODAL()结束后再调用COMMBOX 则不对访问它只能在它的生存期内。如果在对话框显示时,在ENDDIALOG之前则你可以用以下几种方法获了取设你的COMBOX的ID为IDCCOMBOX
    1。
       为你的IDCCOMBOX加一个变量
       (按住CTRL 再用鼠标双击你的COMMBOX,在弹出的对话框中加入你的变量,如果是只能选择类型只能加数字型变量,如果为可选并可编辑的则只能加入字符串类型的)
    2。
       GetDlgItemText(int nID,CString &rString)3。关于COMBOX我的一个用法,本不外传的  —)
      这种方法可获取选中了第几个,选中的字符为什么  STEP1。  设定COMBOX为只选类型
      STEP2。  为它添加一个INT的变量
      STEP3。  再改COMBOX的类型为DROPDOWN可编辑的
      STEP4。  再为它再加一个STRING变量
      STEP5。  再修改为程式要用的模式  STEP6。  在用户点击了OK后
              UPDATEDATA();  STEP7。  
              使用上面添加的变量就可以了,在退出DAILOG后还可以使用这两个变量。
      

  9.   

    我想直接得到选项和数据,就像这样:
    if(dlg.domodal() == idok)
    {
        int i=dlg.m_strCmb.GetCurSel(); <-这里执行非法操作,这是为什么?
      
      然后得到文本  
      addrec.Food_Name.GetLBText(i,myStr);
    }
      

  10.   


    //加入对话框资源,利用ClassWizard新建一对话框类CMyDlg,还利用ClassWizard添加CComboBox m_cCombo,
    //CString m_strCombo两个变量;
    //在CView中,定义一CMyDlg指针,响应响应菜单命令时,新建CMyDlg实例,调用DoModal方法,
    //m_strCombo就是ComboBox中所选内容//**********************MyDlg.h*****************************
    class CMyDlg : public CDialog
    {
    public:
    CString m_strCombo;
    CComboBox m_cCombo;
    virtual BOOL OnInitDialog();
    }
    //**********************MyDlg.cpp*****************************// CMyDlg 消息处理程序BOOL CMyDlg::OnInitDialog()
    {
    CDialog::OnInitDialog(); // TODO:  在此添加额外的初始化
    m_cCombo.AddString("1");
    m_cCombo.AddString("2");
    m_cCombo.AddString("3");
    m_cCombo.AddString("4"); return TRUE;  // return TRUE unless you set the focus to a control
    }//**********************testViewDlgView.h*****************************
    class CMyDlg;
    class CtestViewDlgView : public CView
    {
    // 属性
    public: CMyDlg* pMyDlg;
    }
    //**********************testViewDlgView.cpp*****************************
    #include "MyDlg.h"CtestViewDlgView::CtestViewDlgView()
    {
    pMyDlg=NULL;}CtestViewDlgView::~CtestViewDlgView()
    {
    if(pMyDlg)
    delete pMyDlg;
    }//响应菜单命令
    void CtestViewDlgView::OnDlg()
    {
    // TODO: 在此添加命令处理程序代码
    pMyDlg=new CMyDlg();
    if(pMyDlg)
    {
    pMyDlg->DoModal();
    CString aa=pMyDlg->m_strCombo;
    AfxMessageBox("your select is "+ aa);
    }
    }
      

  11.   

    Saimen(全拼) :
    我强行加入了两个变量:int ,CString
    在DDX中有映射,都映射到一个CComboBox,
    编译过去了,但CComboBox有点问题,下拉列表拉不下来,我用的是VC.net,是不是因为这点呢?
      

  12.   

    //响应菜单命令
    void CtestViewDlgView::OnDlg()
    {
    // TODO: 在此添加命令处理程序代码
    pMyDlg=new CMyDlg();
    if(pMyDlg)
    {
    if(pMyDlg->DoModal()==IDOK)
    {
    CString aa=pMyDlg->m_strCombo;
    AfxMessageBox("your select is "+ aa);
    }
    }
    }
      

  13.   

    用ClassWizard添加CComboBox m_cCombo,CString m_strCombo两个变量;
    我用的也是VC.net,NO PROBLEM!
      

  14.   

    Lemon_2000(柠檬):
    我怎么得到选择的位置呢?
      

  15.   

    用DDX映射了两个变量:控件变量CComboBox m_cCombo 用来添加可选项,字符变量CString m_strCombo用来存放已选项
      

  16.   

    自定义类成员变量int m_nIndex在OnSelChange消息中
    m_nIndex=m_cCombo.GetCurSel();在CView中
    pMyDlg—>m_nIndex就是选择的位置
      

  17.   

    alphapiao(叶飘飞) :
    我想在我的View里得到,
    就像这样:
    if(dlg.domodal() == idok)
        int i=dlg.m_strCmb.GetCurSel();
        
    然后再得到文本。
      

  18.   

    Lemon_2000(柠檬) :
    谢谢,我先试试!