FORMAT:='yyyy-MM'
也就是我用这个控件时,我只用来显示年月,不要日期的信息
调成dmUpDown模式后,点上下箭头时,光标所在的栏目的值会改变,但是如果月到了12再点就变成了1月,但是年份不变,我现在希望能联动,也就是月份到了十二月份后再点击就到了下一年的一月。

解决方案 »

  1.   

    //我感觉自己写一下就可以了,给你一点参考。希望对你有帮助。
    procedure TForm1.DateTimePicker1Change(Sender: TObject);
    var
      Year, Month, Day: Word;
    begin
      DecodeDate(self.DateTimePicker1.Date,year,month,day);
      if month=1 then
        self.DateTimePicker1.Date:=EncodeDate(Year+1, Month, Day);
    end;
      

  2.   

    定义1个CurrentMonth记录当前月份,当你点击上下箭头时取的1个AfterMonth
    然后根据这个判断
    if CurrentMonth > AfterMonth then
    begin
       if AfterMonth=1 then
           减一年
    end
    else begin
    if AfterMonth=1 then
           加一年
    end;
    CurrentMonth := AfterMonth//修改当前月份,便于下次比较。
          
      

  3.   

    用全局变量来实现了,不知大家还有没有更好的方法
    procedure Tfrmmain.dtpstartEnter(Sender: TObject);
    begin
    if OLDstartMONTH<=0 then OLDstartMONTH:=MonthOf((Sender as TDateTimePicker ).Date);
    end;procedure Tfrmmain.dtpstartChange(Sender: TObject);
    var 
      Year, Month, Day: Word; 
    begin
       DecodeDate(self.dtpstart.Date,year,month,day);
    if (OLDstartMONTH=12) and (month=1) then
       begin
        self.dtpstart.Date:=EncodeDate(Year+1, Month, Day);
       end;
     if (OLDstartMONTH=1) and (month=12)  then
        begin
        self.dtpstart.Date:=EncodeDate(Year-1, Month, Day);
        end;
        OLDstartMONTH:= month;
    end;