我在对话框中建立了一个组合框,关联了两个成员变量,分别时
CComboBox m_ComboBox_tooth;
CString m_strTeeth;
在组合框内输入一部分数字,并打算在供选择的数据中没有时直接在组合框中输入数据.
响应的函数如下
void CDataDlg::OnEditchangeComboTooth() 
{
// TODO: Add your control notification handler code here
UpdateData();
    
N=atoi(m_strTeeth.GetBuffer(0));
if (N<=0||N>=9) {
MessageBox("刀齿数输入有错");
}
}
问题时运行时我在在组合框中刚敲入一个数字就会跳出一个小的提示框
"请键入一个数值",点击确认后程序继续运行,MessageBox("刀齿数输入有错")也会出来,这是为什么啊,我连两位数都没法敲进去,
还有,这个提示框在我在不进行界面上任何输入时点击返回按钮时也会调出来,谁能告诉我是怎么回事?

解决方案 »

  1.   

    组合框发生变化时就调用你的函数
    "请键入一个数值",UpdateData()失败,你看有没有其它地方让你输入数字的而你没有输入的,UpdateData()失败后,可能m_strTeeth没有赋值程序继续执行, "刀齿数输入有错"
      

  2.   

    失去焦点的时候再判断,或者在DoDateExchange里判断
      

  3.   

    我这儿是输入第二个数字时MessageBox("刀齿数输入有错")
    因为要求是 if (N<=0||N>=9) {
      

  4.   

    void CDataDlg::OnEditchangeComboTooth() 
    {
    // TODO: Add your control notification handler code here
    UpdateData();
        
    N=atoi(m_strTeeth.GetBuffer(0));
    }
    还是老样子,不过我发现在调出这个对话框后,先输入其他编辑框的内容,在输入这个组合框的内容就没事了,奇怪啊?
      

  5.   

    为什么会updatedata失败呢,在执行函数CDataDlg::OnEditchangeComboTooth() 时应该内容已经改变了啊,这个函数什么时候用呢,我刚想到只输入一位数时内容就已经发生改变了,是不是马上就调用这个函数了?
      

  6.   

    在pretranslatemessage中判断焦点是否在combo的edit上。以此来截获回车
      

  7.   

    还是不明白出错的原因?是updatedata的问题,还是别的,为啥要判断焦点呢,是为了确保回车后执行CDataDlg::OnEditchangeComboTooth() 函数吗?
      

  8.   

    应该没错误啊,你在N=atoi(m_strTeeth.GetBuffer(0));设个断点看看,N是多少啊.
      

  9.   

    建议不要用GetBuffer()这个函数,换个其他方法试试。
      

  10.   

    还是不明白啊,CDataDlg::OnEditchangeComboTooth() 是文本被修改并重新显示调用的函数,系统到底什么时候调用的呢?是回车?还是失去焦点是,总不能一修改就调用吧,要是我还没改完呢
    另外to GoldenSword(金错刀) 可以关联两个不同类型的变量啊
      

  11.   

    to  wxdvc(csdn)
    设置断点查了一下,我输入5,马上就调出"请键入一个数",然后查看发现N=5,
      

  12.   

    另外,点击返回按钮时也会调出来"请键入一个数",返回按钮的响应函数中只有CDialog::OnOK();一条语句
      

  13.   

    发招聘地走了,大家还是讨论一下吧,虽然用别的途径解决了这个问题,但对下面地问题还是不明白CDataDlg::OnEditchangeComboTooth()  是文本被修改并重新显示调用的函数,系统到底什么时候调用的呢?是回车?还是失去焦点是,总不能一修改就调用吧,要是我还没改完呢