有三个EDIT,分别是  利润,价格,利润率(成本已知) 要求输入利润,把价格和利润率算出来。输入价格把利润和利润率算出来,输入利润率把价格和利润算出来。(这算法很简单)。但是却遇到了以下麻烦:1、因为要求自动算出,所以把计算过程分别在每个EDIT的CHANGE事件中写的。所以,当把一个计算完成后,另一个EIDT值发生变化,另一个EDIT的CHANGE事件被执行,反过来影响本身值,造成DELPHI执行错误。这应该怎么解决?2、由于系统允许负利润,而DELPHI本身不带四舍五入,那么算处的结果应该怎么处理负利润呢?

解决方案 »

  1.   

    1 写一个过程,专门计算它们的关系,然后给它们赋值,当一个edit change后,就调用这个过程2 不明白你的意思,:(
      

  2.   

    1、当其中一个EDIT的值发生变化时,可以设置另外两个EDIT的CHANGE事件=nil;然后在
      EDIT退出时再设置另外两个EDIT的CHANGE事件2、四舍五入可以采用round函数
      

  3.   

    在可能相互触发的函数中用一个全局变量(单元内的变量也可以)一个事件发生时先把全局变量锁定,然后在完成后要记得打开全局变量就可以了,DELPHI好象有四舍五入你自己去找一下我好久没用忘了
      

  4.   

    1。加一个条件判断,区分是由程序引起的 OnChange 还是由用户输入引起的 OnChange。
    2。Trunc(x+0.5)
    用 Round 会达到四舍五入的效果
      

  5.   

    用 Round 不会达到四舍五入的效果
      

  6.   

    不要写到change事件中,写到keydown和exit事件中
      

  7.   

    to hiflower(花) 好方法,可是怎么判断那,是不是要发送消息来判断,关注
      

  8.   

    Mrkang(代奥肥):
    不用消息啊,你的程序修改 Text 时,做个标记就行啦
      

  9.   

    TO: hiflower(花) 
    怎么样做标记呢?能举个例子吗?Trunc(x+0.5)使用它时是否需要判断X是否正负啊?而且怎么样确定这个函数的小数保留位数?
      

  10.   

    1.写一个独立的计算函数.这个函数只执行一次,直到清空文本框中的数字为止,才可再执行.
    2.这个函数响应onChange事件.但只响应一次.直到清空文本框中的数字为止,才可再执行.
      

  11.   

    >>1、当其中一个EDIT的值发生变化时,可以设置另外两个EDIT的CHANGE事件=nil;然后在
    >>  EDIT退出时再设置另外两个EDIT的CHANGE事件
     yfjyz(dd) 的意見不錯啊
      

  12.   

    type
      TForm1=class(TForm)
       ...
       privated
         ABool:Boolean;
      end;procedure TForm1.Edit1Change(....);
    begin
      if ABool then Exit;
      ABool:=True;
      Edit2.Text:=....;
      ABool:=False;
    end;
    procedure TForm1.Edit2Change(....);
    begin
      if ABool then Exit;
      ABool:=True;
      Edit1.Text:=....;
      ABool:=False;
    end;四舍五入有现成的函数 RoundTo
      

  13.   

    关注怎么样才能把事件设为NIL?
    edit1.onchange=nil 对吗?怎么在一个事件中执行另一个事件?edit1.onchange  行吗?
      

  14.   

    加一個妓女式的全局變量:
      在每一個Edit的onKeyPress裡把她更改;
      在每一個Edit的onChange裡判斷就可以了。四舍五入?
      Format('%0.2f', [FloatValue]');
      

  15.   

    Format('%0.2f', [FloatValue]);
      

  16.   

    hiflower(花) ( ) 都已经说过了!我认为他很正确