UpDown的OnChangeEx事件中可以获得按钮的状态
点向上按钮时 Direction=udpUP
点向下按钮时 Direction=udpDown 但有时点向上或向下按钮,却有Direction=udpNone,不知道这是什么原因,能不能让它不出现Direction=udpNone的情况,望各位赐教

解决方案 »

  1.   

    这个控件不知道算不算是bug帮助里是这么说的:
    updNone The position is changing to an illegal value (less than the minimum value or greater than the maximum value).
    updUp The position is increasing.
    updDown The position is decreasing.源码里是这样的:
      if (FNewValue < Min) and (FNewValueDelta < 0) or
      (FNewValue > Max) and (FNewValueDelta > 0) then
        Direction := updNone
      else if FNewValueDelta < 0 then
        Direction := updDown
      else if FNewValueDelta > 0 then
        Direction := updUp;我的测试代码:
    procedure TForm1.UpDown1ChangingEx(Sender: TObject;
      var AllowChange: Boolean; NewValue: Smallint;
      Direction: TUpDownDirection);
    begin
      Caption:=Caption+IntToStr(NewValue);
      case Direction of
       updUP : Caption:=Caption+'u';
       updNone :Caption:=Caption+'n';
       updDown :Caption:=Caption+'d';
      end;
    end;测试结果:当第一次点击向下的按钮时,FNewValueDelta=-1, FNewValue也从0变为-1,满足if (FNewValue < Min) and (FNewValueDelta < 0) Direction值就会为updNone。其中Min=0,Max=100。也就是说,点一下向上按钮FNewValue+1,点一下向下按钮FNewValue-1,当FNewValue超出0~100范围Direction就会为None。
      

  2.   

    也就是说只要把NewValue控制在Min与Max之间就不会有updNone出现了是吗?
      

  3.   

    也就是说只要把NewValue控制在Min与Max之间就不会有updNone出现了是吗?
    ------------
    是的。这个控件我用得比较少,我见到一些第三方控件,上下键都对应一个点击事件,也不存在udpNone这样的东西。
      

  4.   

    看了源码,问题就应该清楚了  if (FNewValue < Min) and (FNewValueDelta < 0) or
      (FNewValue > Max) and (FNewValueDelta > 0) then
        Direction := updNone
      else if FNewValueDelta < 0 then
        Direction := updDown
      else if FNewValueDelta > 0 then
        Direction := updUp;