各位前辈,小弟刚学C#,碰到些问题,还望各位帮解答一下。
程序要求:把一个文本框中的浮点数据转为16位无符号数据输出。
步骤要求:1.当文本框输入完成后触发事件,把浮点数转为16位整数。
          2.当按下一个按键后触发另一个事件,用“MessageBox”将刚才的
            16位整数显示出来。
问题:    因换算工作是在输入完成后就进行,请问用文本框的哪个事件合适?
曾做尝试:1.用文本框的“TextChanged”事件,可这样似乎有点浪费CPU资源,因为
            每输入一个数字都会触发一次事件,而且还会在输入小数点时引发异常。
          2.用文本框的“leave”事件,当光标离开文本框时就触发事件。可这样
            又有新的问题:如果输入完成后直接点击按键,这时光标离开文本框了,理
            应执行“leave”事件,可因点击按键时,又触发了另一个事件,请问系统
            是先检测到哪个事件?先执行哪个事件?如果要实现程序的要求,还有没有
            别的更好的办法?

解决方案 »

  1.   

    当然是先leave 让后才能click其他按钮的。
      

  2.   

    不会同时触发的,会先执行光标离开“leave”事件 
    你可以试试哪个先执行 等待其他解决办法
      

  3.   

    可能用Validating事件比较合适,可以限制文本框内容必须符合要求才能离开。
      

  4.   

    应该是先执行leave事件,再执行click事件的,你leave事件里是否写代码了?
      

  5.   

    1:不要轻易质疑系统本身的健康性。
    2:系统不是绝对完美的。
    事件再怎么着 都是有先后顺序的。不可能同时,最多是一个事件里嵌套另外一个。LEAVE先执行  然后才是其他控件的事件
      

  6.   

              "用文本框的“TextChanged”事件,可这样似乎有点浪费CPU资源,因为 
                每输入一个数字都会触发一次事件,而且还会在输入小数点时引发异常。"

     你试过了? "TextChanged”事件输入完光标在文本框失去焦点时候才触发。
      

  7.   

    回复1楼:因操作员的操作比较随机,而且之前的软件一直都是设置完数值后直接就点击按键了,所以他们没有按回车键的习惯。当然之前的软件估计是在点击按键时才进行换算的。
    回复3楼:我曾试过在执行“leave”事件时在一个标签显示一个值,然后在执行“click”事件时在另一个标签显示另一个值,结果看到是先执行“leave”事件,再执行“click”事件,但不能保证每次都是这样,因为不知会不会有时系统是先检测到光标在按键上才知道光标已离开了文本框,这样的话应该是先触发“click”事件。
    另外我也试过设这两个事件都弹出“MessageBox”,结果只有“leave”事件弹出,关闭后也不弹出“click”事件的。
      

  8.   

    LEAVE先执行,然后才是其他控件的事件。
    自己可以设置断点调试下。
    最后不要用回车来控制,太不人性化了,客户会郁闷死

      

  9.   

    有OnKeyDown么?按照你的方法直接实现就好了,就等于类似工商银行的汇款里面的那个输入数字 变化是一样的了吧?或者直接用你的方法 “TextChanged” 应该都可以的,殊途同归
      

  10.   


    貌似你错拉,"TextChanged”在文本改变的时候就会被触发
      

  11.   

    回复12楼:试过啊,我用标签监视,每输入一个数字都会触发一次事件。
    回复7楼: 效验的话也只能效能不能有效转换,但合法的输入是很多的,如3.12合法,3.123也是合法等。
    回复6楼: 因为点击按键会有很多次,但并不是每次都输入新数值,如果每点击按键都执行换算的话也浪费资源了。我是不是太斤斤计较资源了?!PS:各位若有兴趣,可以试一下这两个事件都弹出一个“MessageBox”,看有什么情况。
      

  12.   

    回复15楼:我的理解是按键按下时才产生文本框的“leave”事件,系统是先检测到按键按下,才知道有“leave”事件,虽然按键按下也有事件,不过先后有序,所以只好调头先执行“leave”的,再执行“click”的,不知对不对?
      

  13.   

    LEAVE先执行  然后才是其他控件的事件 .系统会根据你程序发回的系统消息来处理事件,很显然,LEAVE的消息先于Click消息,所以系统会先执行LEAVE然后处理Click