我在一个对话框中添加了两个单选按钮(同组),和两个文本框。我想实现这样的功能。一个单选按钮对应一个文本框,当一个单选按钮被选中时,其对应的文本框可用,如果单选按钮未被选中,则对应的文本框不可用。请问如何实现啊?

解决方案 »

  1.   


    很容易啊,对两个单选按钮的事件进行处理,然后enablwindow()就可以了。
      

  2.   

    响应ON_BN_CLICKED,就是按钮按下的消息;
    对应的文本框GetDlgItem(IDC_xxx)->EnableWindow(TRUE)
    另外一个GetDlgItem(IDC_xxx)->EnableWindow(FALSE)
      

  3.   

    为什么我这样写实现不了呢?
    void A::OnARadio() 
    {
    if (m_btnA.GetCheck())
    {
                GetDlgItem(IDC_A_EDIT)->EnableWindow(TRUE); 
                GetDlgItem(IDC_B_EDIT)->EnableWindow(FALSE);
    }
    else
    {
                GetDlgItem(IDC_A_EDIT)->EnableWindow(FALSE); 
                GetDlgItem(IDC_B_EDIT)->EnableWindow(TRUE);
    }
    }void A::OnBRadio() 
    {
    if (!m_btnA.GetCheck())
    {
               GetDlgItem(IDC_A_EDIT)->EnableWindow(FALSE); 
                GetDlgItem(IDC_B_EDIT)->EnableWindow(TRUE);
    }
    else
    {
                GetDlgItem(IDC_A_EDIT)->EnableWindow(TRUE); 
                GetDlgItem(IDC_B_EDIT)->EnableWindow(FALSE);
    }
    }
      

  4.   

    如果是想要选中,文本框可用,再按一次不选中,文本框不可用,这样切换的话,建议用复选框好点,void CAdfasdDlg::OnCheck1() 
    {
    // TODO: Add your control notification handler code here
    if(((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck())
    GetDlgItem(IDC_EDIT3)->EnableWindow(true);
    else
    GetDlgItem(IDC_EDIT3)->EnableWindow(false);
    }
    不知你是不是这个意思,,
      

  5.   


    不很清楚你的意思,这2个按钮是同组的吗?如果是同组的,那么这2个else里的语句永不会被执行,
      

  6.   

    void A::OnARadio() 
    {
        GetDlgItem(IDC_A_EDIT)->EnableWindow(TRUE); 
        GetDlgItem(IDC_B_EDIT)->EnableWindow(FALSE); 
    }void A::OnBRadio() 

        GetDlgItem(IDC_A_EDIT)->EnableWindow(FALSE); 
        GetDlgItem(IDC_B_EDIT)->EnableWindow(TRUE); 
    }
      

  7.   

    这两个radio是同组的。我想实现的是一个radio被选中(而不仅仅是单击),然后它相应的文本可用,未被选中的那个radio对应的文本不可用。
      

  8.   


    单击即小选中了此radio按钮,在单击响应函数里设置文本框即可,想9楼那样是不是你要的?
      

  9.   

    通过DDX机制,将该组按钮定义为一个变量,如
      int m_nRadio;DDX的实现
      DDX_Radio(pDX, IDC_RADIO1, m_nRadio);void A::OnARadio() 
    {
      OnRadio();
    }
    void A::OnBRadio() 
    {
      OnRadio();
    }增加一个成员函数OnRadio();void A::OnRadio() 
    {
      UpdateData();
      GetDlgItem(IDC_A_EDIT)->EnableWindow( m_nRadio == 0 ? TRUE : FALSE); 
      GetDlgItem(IDC_B_EDIT)->EnableWindow( m_nRadio == 0 ? FALSE : TRUE ); 
    }

      

  10.   

    通过DDX机制,将该组按钮定义为一个变量,如 
      int m_nRadio; DDX的实现 
      DDX_Radio(pDX, IDC_RADIO1, m_nRadio); void A::OnARadio() 

      OnRadio(); 

    void A::OnBRadio() 

      OnRadio(); 
    } 增加一个成员函数OnRadio(); void A::OnRadio() 

      UpdateData(); 
      GetDlgItem(IDC_A_EDIT)->EnableWindow( m_nRadio == 0 ? TRUE : FALSE); 
      GetDlgItem(IDC_B_EDIT)->EnableWindow( m_nRadio == 1 ? TRUE : FALSE); 
    }
      

  11.   

    方法有很多种。9楼就是其中之一。下面是另一种方法:
    .h文件中:
    // Generated message map functions
    //{{AFX_MSG(SetupDlg5)
    afx_msg void OnSelect(UINT nID);
    //}}AFX_MSG
    .CPP中:
    BEGIN_MESSAGE_MAP(SetupDlg5, CDialog)
    //{{AFX_MSG_MAP(SetupDlg5)
    ON_COMMAND_RANGE(IDC_RADIO1,IDC_RADIO2,OnSelect)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()void C****::OnSelect(UINT nID)
    {
    switch(nID)
    {
    case IDC_RADIO1: //单击第一个
    GetDlgItem(IDC_A_EDIT)->EnableWindow(TRUE); 
                    GetDlgItem(IDC_B_EDIT)->EnableWindow(FALSE); 
    break;
    case IDC_RADIO2: //单击第二个
    GetDlgItem(IDC_A_EDIT)->EnableWindow(FALSE); 
                    GetDlgItem(IDC_B_EDIT)->EnableWindow(TRUE); 
    break;
    default:break;
    }
    }