• <menu id="w2i4a"></menu>
  • logo VARCHART XGantt 2019教程

    文檔首頁>>VARCHART XGantt 2019教程>>VARCHART XGantt用戶手冊(.NET版):如何使用日歷(中)

    VARCHART XGantt用戶手冊(.NET版):如何使用日歷(中)


    VARCHART XGantt是一個交互式的甘特圖控件,其模塊化的設(shè)計讓您可以創(chuàng)建滿足您和您的客戶所需求的應(yīng)用程序。相較于其他甘特圖控件,VARCHART XGantt穩(wěn)定性高,開發(fā)時間長,各大行業(yè)的知名公司都在使用它。本文主要描述了如何使用日歷教程中的定義日歷的后面部分內(nèi)容,現(xiàn)在跟著小編來了解一下吧~

    點擊下載VARCHART XGantt免費版

    區(qū)分一天中的工作時間和非工作時間需要一個日配置文件,該日配置文件可以指定精確的時鐘時間,例如從8.00 h到12.00 h am和從1.00 h到5.00 h pm。由于新創(chuàng)建的日配置文件僅包含工作時間,因此任何中斷都應(yīng)定義為非工作間隔。

    示例代碼C#

    // Defining a day profile
    VcCalenderProfile calendarProfile =
    calendar.CalendarProfileCollection.Add("DayProfile");
    calendarProfile.Type = VcCalendarProfileType.vcDayProfile;
    VcInterval interval =
    calendarProfile.IntervalCollection.Add("Interval_1");
    // 00:00-8:00
    interval.CalendarProfileName = "";
    interval.StartTime = new DateTime(2011, 1, 1, 0, 0, 0);
    interval.EndTime = new DateTime(2011, 1, 1, 8, 0, 0);
    interval = calendarProfile.IntervalCollection.Add("Interval_2");
    // 12:00-13:00
    interval.CalendarProfileName = "";
    interval.StartTime = new DateTime(2011, 1, 1, 12, 0, 0);
    interval.EndTime = new DateTime(2011, 1, 1, 13, 0, 0);
    interval = calendarProfile.IntervalCollection.Add("Interval_3");
    // 17:00-24:00
    interval.CalendarProfileName = "";
    interval.StartTime = new DateTime(2011, 1, 1, 17, 0, 0);
    interval.EndTime = new DateTime(2011, 1, 1, 0, 0, 0);

    示例代碼VB.NET

    ' Defining a day profile
    Dim calendarProfile As VcCalenderProfile =
    calendar.CalendarProfileCollection.Add("DayProfile")
    calendarProfile.Type = VcCalendarProfileType.vcDayProfile
    
    Dim interval As VcInterval =
    calendarProfile.IntervalCollection.Add("Interval_1")
    ' 00:00-8:00
    interval.CalendarProfileName = ""
    interval.StartTime = New DateTime(2011, 1, 1, 0, 0, 0)
    interval.EndTime = New DateTime(2011, 1, 1, 8, 0, 0)
    
    interval = calendarProfile.IntervalCollection.Add("Interval_2")
    ' 12:00-13:00
    interval.CalendarProfileName = ""
    interval.StartTime = New DateTime(2011, 1, 1, 12, 0, 0)
    interval.EndTime = New DateTime(2011, 1, 1, 13, 0, 0)
    
    interval = calendarProfile.IntervalCollection.Add("Interval_3")
    ' 17:00-24:00
    interval.CalendarProfileName = ""
    interval.StartTime = New DateTime(2011, 1, 1, 17, 0, 0) 
    interval.EndTime = New DateTime(2011, 1, 1, 0, 0, 0)

    時鐘時間由對象DateTime設(shè)置。日期部分被忽略,因為在這種情況下它毫無意義。只需要在構(gòu)造函數(shù)中設(shè)置日期,即可為構(gòu)造函數(shù)所需的所有參數(shù)設(shè)置一個值。在Interval_3中,指定0h或24h是很重要的,因為后者在DateTime對象中不被接受。

    一年中的定期日期(例如1月1日的除夕夜或12月25日和26日的圣誕節(jié)節(jié)禮日),由涵蓋全年的日歷配置文件定義。

    示例代碼C#

    // Setting a profile of fixed annual holidays
    VcCalenderProfile calendarProfile =
    calendar.CalendarProfileCollection.Add("YearProfile");
    calendarProfile.Type = VcCalendarProfileType.vcYearProfile;
    VcInterval interval = calendarProfile.IntervalCollection.Add("New
    Year");
    interval.CalendarProfileName = "";
    interval.DayInStartMonth = 1 ;
    interval.StartMonth = VcMonth.vcJanuary;
    interval.DayInEndMonth = 1;
    interval.EndMonth = VcMonth.vcJanuary;
    SetAppearanceForHolidays(interval);
    interval = calendarProfile.IntervalCollection.Add("Chrismas");
    interval.CalendarProfileName = "";
    interval.DayInStartMonth = 25 ;
    interval.StartMonth = VcMonth.vcDecember;
    interval.DayInEndMonth = 26;
    interval.EndMonth = VcMonth.vcDecember;
    SetAppearanceForHolidays(interval);

    示例代碼VB.NET

    ' Setting a profile of fixed annual holidays
    Dim calendarProfile As VcCalenderProfile =
    calendar.CalendarProfileCollection.Add("YearProfile")
    calendarProfile.Type = VcCalendarProfileType.vcYearProfile
    
    Dim interval As VcInterval = calendarProfile.IntervalCollection.Add("New
    Year")
    interval.CalendarProfileName = ""
    interval.DayInStartMonth = 1
    interval.StartMonth = VcMonth.vcJanuary
    interval.DayInEndMonth = 1
    interval.EndMonth = VcMonth.vcJanuary
    SetAppearanceForHolidays(interval)
    
    interval = calendarProfile.IntervalCollection.Add("Christmas")
    interval.CalendarProfileName = ""
    interval.DayInStartMonth = 25
    interval.StartMonth = VcMonth.vcDecember
    interval.DayInEndMonth = 26 
    interval.EndMonth = VcMonth.vcDecember
    SetAppearanceForHolidays(interval)

    為了避免重復(fù)設(shè)置產(chǎn)生相同的假期外觀,我們使用名為SetAppearanceForHolidays的方法收集調(diào)用:

    示例代碼C#

    // Method to set the visual appearance of holidays
    void SetAppearanceForHolidays(VcInterval interval)
    {
     interval.BackgroundColor = Color.FromArgb(255, 255, 164, 164);
     interval.Pattern = VcFillPattern.vcWeavePattern;
     interval.PatternColor = Color.FromArgb(255, 64, 64, 64);
     interval.LineColor = Color.FromArgb(255, 128, 128, 128);
     interval.LineThickness = 1;
     interval.LineType = VcLineType.vcSolid;
     interval.UseGraphicalAttributes = true;
    }

    示例代碼VB.NET

    ' Method to set the visual appearance of holidays
    Private Sub SetAppearanceForHolidays(ByVal interval As VcInterval)
     interval.BackgroundColor = Color.FromArgb(255, 255, 164, 164)
     interval.Pattern = VcFillPattern.vcWeavePattern
     interval.PatternColor = Color.FromArgb(255, 64, 64, 64)
     interval.LineColor = Color.FromArgb(255, 128, 128, 128)
     interval.LineThickness = 1
     interval.LineType = VcLineType.vcSolid
     interval.UseGraphicalAttributes = True
    End Sub

    請注意:顏色屬性僅在其CalendarProfileName設(shè)置為<WORK><NONWORK>的間隔內(nèi)有效。另外,間隔屬性UseGraphicalAttribute需要設(shè)置為true。對于calenderGrid屬性UseGraphicalAttributesOfIntervals同樣如此。

    每年必須計算浮動假期(例如復(fù)活節(jié))和其他依賴于它們的假期,并且需要將其作為固定日期分配給日歷。下面的方法對此非常有用:

    示例代碼C#

    // Method to find floating holidays
     public enum Anniversary
     {
     AshWednesday,
     GoodFriday,
     EasterSunday,
     EasterMonday,
     FeastOfCorpusChristi,
     AscensionOfChrist,
     WhitSunday,
     WhitMonday, 
     CentralEuropeanSummerTimeStart,
     CentralEuropeanSummerTimeEnd
     }
    private DateTime calculateAnniversaryForYear(int year, Anniversary
    specialDay)
    {
     int g = year % 19;
     int c = year / 100;
     int h = (c - c / 4 - (8 * c + 13) / 25 + 19 * g + 15) % 30;
     int i = h - (h / 28) * (1 - (29 / (h + 1)) * ((21 - g) / 11));
     int j = (year + year / 4 + i + 2 - c + c / 4) % 7;
     int month = 3 + (i - j + 40) / 44;
     int day = i - j + 28 - 31 * (month / 4);
     int dayOffset = 0;
     switch (specialDay)
     {
     case Anniversary.AshWednesday:
     dayOffset = -40;
     break;
     case Anniversary.GoodFriday:
     dayOffset = -2;
     break;
     case Anniversary.EasterSunday:
     break;
     case Anniversary.EasterMonday:
     dayOffset = 1;
     break;
     case Anniversary.AscensionOfChrist:
     dayOffset = 39;
     break;
     case Anniversary.WhitSunday:
     dayOffset = 49;
     break;
     case Anniversary.WhitMonday:
     dayOffset = 50;
     break;
     case Anniversary.FeastOfCorpusChristi:
     dayOffset = 60;
     break;
     case Anniversary.CentralEuropeanSummerTimeStart:
     month = 3;
     day = 31 - Convert.ToInt32(new DateTime(year, 3,
    31).DayOfWeek);
     break;
     case Anniversary.CentralEuropeanSummerTimeEnd:
     month = 10;
     day = 31 - Convert.ToInt32(new DateTime(year, 10,
    31).DayOfWeek);
     break;
     }
     return new DateTime(year, month, day).AddDays(dayOffset);
     }

    示例代碼VB.NET

    ' Method to find floating holidays
     Public Enum Anniversary
     AshWednesday 
     GoodFriday
     EasterSunday
     EasterMonday
     FeastOfCorpusChristi
     AscensionOfChrist
     WhitSunday
     WhitMonday
     CentralEuropeanSummerTimeStart
     CentralEuropeanSummerTimeEnd
    End Enum
    
    Private Function calculateAnniversaryForYear(ByVal year As Integer,
    ByVal specialDay As Anniversary) As DateTime
     Dim g As Integer = Decimal.Remainder( year , 19 )
     Dim c As Integer = year / 100
     Dim h As Integer = (c - c / 4 -(8 * c + 13) / 25 + 19 * g + 15) % 30
     Dim i As Integer = h -(h / 28) *(1 -(29 /(h + 1)) *((21 - g) / 11))
     Dim j As Integer = (year + year / 4 + i + 2 - c + c / 4) % 7
     Dim month As Integer = 3 +(i - j + 40) / 44
     Dim day As Integer = i - j + 28 - 31 *(month / 4)
    
     Dim dayOffset As Integer = 0
     Select Case specialDay
     Case Anniversary.AshWednesday
     dayOffset = -40
     Case Anniversary.GoodFriday
     dayOffset = -2
     Case Anniversary.EasterSunday
     Exit Function
     Case Anniversary.EasterMonday
     dayOffset = 1
     Case Anniversary.AscensionOfChrist
     dayOffset = 39
     Case Anniversary.WhitSunday
     dayOffset = 49
     Case Anniversary.WhitMonday
     dayOffset = 50
     Case Anniversary.FeastOfCorpusChristi
     dayOffset = 60
     Case Anniversary.CentralEuropeanSummerTimeStart
     month = 3
     day = 31 - Convert.ToInt32(New DateTime(year, 3, 31).DayOfWeek)
     Case Anniversary.CentralEuropeanSummerTimeEnd
     month = 10
     day = 31 - Convert.ToInt32(New DateTime(year, 10,
    31).DayOfWeek)
     End Select
     Return New DateTime(year, month, day).AddDays(dayOffset)
    End Function

    在下一步中,將周配置文件和假日配置文件作為間隔分配給日歷。然后以相同的方式計算浮動假期并將其分配給日歷:

    示例代碼C#

    // Assembling the week profile, the holiday profile and the floating
    holidays into an interval
    interval = calendar.IntervalCollection.Add("Weekly_Pattern"); 
    interval.CalendarProfileName = "WeekProfile";
    interval = calendar.IntervalCollection.Add("Yearly_Pattern");
    interval.CalendarProfileName = "YearProfile";
    int startYear = vcGantt1.TimeScaleStart.Year;
    int endYear = vcGantt1.TimeScaleEnd.Year;
    for (int i=startYear; i<=endYear; i++)
    {
     interval = calendar.IntervalCollection.Add("GoodFriday_" +
    i.ToString());
     interval.CalendarProfileName = "";
     interval.StartDateTime = calculateAnniversaryForYear(i,
    Anniversary.GoodFriday);
     interval.EndDateTime = interval.StartDateTime;
     SetAppearanceForHolidays(interval);
     interval = calendar.IntervalCollection.Add("EasterMonday_" +
    i.ToString());
     interval.CalendarProfileName = "";
     interval.StartDateTime = calculateAnniversaryForYear(i,
    Anniversary.EasterMonday);
     interval.EndDateTime = interval.StartDateTime;
     SetAppearanceForHolidays(interval);
     interval = calendar.IntervalCollection.Add("FeastOfCorpusChristi_" +
    i.ToString());
     interval.CalendarProfileName = "";
     interval.StartDateTime = calculateAnniversaryForYear
    (i, Anniversary.FeastOfCorpusChristi);
     interval.EndDateTime = interval.StartDateTime;
     SetAppearanceForHolidays(interval);
     interval = calendar.IntervalCollection.Add("AscensionOfChrist_" +
    i.ToString());
     interval.CalendarProfileName = "";
     interval.StartDateTime = calculateAnniversaryForYear(i,
    Anniversary.AscensionOfChrist);
     interval.EndDateTime = interval.StartDateTime;
     SetAppearanceForHolidays(interval);
     interval = calendar.IntervalCollection.Add("WhitMonday_" +
    i.ToString());
     interval.CalendarProfileName = "";
     interval.StartDateTime = calculateAnniversaryForYear(i,
    Anniversary.WhitMonday);
     interval.EndDateTime = interval.StartDateTime;
     SetAppearanceForHolidays(interval);
    }
    vcGantt1.CalendarCollection.Update();

    示例代碼VB.NET

    ' Assembling the week profile, the holiday profile and the floating
    holidays into an interval
    interval = calendar.IntervalCollection.Add("Weekly_Pattern")
    interval.CalendarProfileName = "WeekProfile" 
    interval = calendar.IntervalCollection.Add("Yearly_Pattern")
    interval.CalendarProfileName = "YearProfile"
    
    Dim startYear As Integer = vcGantt1.TimeScaleStart.Year
    Dim endYear As Integer = vcGantt1.TimeScaleEnd.Year
    
    Dim i As Integer
    For i = startYear To endYear Step i + 1
     interval = calendar.IntervalCollection.Add("GoodFriday_" +
    i.ToString())
     interval.CalendarProfileName = ""
     interval.StartDateTime = calculateAnniversaryForYear(i,
    Anniversary.GoodFriday)
     interval.EndDateTime = interval.StartDateTime
     SetAppearanceForHolidays(interval)
    
     interval = calendar.IntervalCollection.Add("EasterMonday_" +
    i.ToString())
     interval.CalendarProfileName = ""
     interval.StartDateTime = calculateAnniversaryForYear(i,
    Anniversary.EasterMonday)
     interval.EndDateTime = interval.StartDateTime
     SetAppearanceForHolidays(interval)
    
     interval = calendar.IntervalCollection.Add("FeastOfCorpusChristi_" +
    i.ToString())
     interval.CalendarProfileName = ""
     interval.StartDateTime = calculateAnniversaryForYear
    (i, Anniversary.FeastOfCorpusChristi)
     interval.EndDateTime = interval.StartDateTime
     SetAppearanceForHolidays(interval)
    
     interval = calendar.IntervalCollection.Add("AscensionOfChrist_" +
    i.ToString())
     interval.CalendarProfileName = ""
     interval.StartDateTime = calculateAnniversaryForYear(i,
    Anniversary.AscensionOfChrist)
     interval.EndDateTime = interval.StartDateTime
     SetAppearanceForHolidays(interval)
    
     interval = calendar.IntervalCollection.Add("WhitMonday_" +
    i.ToString())
     interval.CalendarProfileName = ""
     interval.StartDateTime = calculateAnniversaryForYear(i,
    Anniversary.WhitMonday)
     interval.EndDateTime = interval.StartDateTime
     SetAppearanceForHolidays(interval)
    Next
    
    vcGantt1.CalendarCollection.Update()

    VARCHART XGantt用戶手冊(.NET版):如何使用日歷(中)

    這些是組裝日歷所需的摘要步驟。根據(jù)要求,可以省略單個步驟:

    1、創(chuàng)建不同工作日的日配置文件

    2、通過使用日配置文件組裝周配置文件

    3、定義假期資料

    4、將周配置文件和假日配置文件分配給日歷的間隔集合

    5、為間隔集合分配其他日期(例如浮動假期)

    間隔對象允許定義可解釋為工作時間或非工作時間的時間段。通過CalendarProfileName屬性將句點區(qū)分為<WORK><NONWORK>。通過此屬性,日歷還可以引用其他現(xiàn)有配置文件并采用其設(shè)置。設(shè)置此屬性時,請注意,根據(jù)間隔類型,只能分配某些配置文件類型。間隔類型由選定的配置文件類型隱式選擇。日歷配置文件的預(yù)設(shè)默認值vcDayProfile可以在初始時(即在定義間隔之前)通過相應(yīng)的設(shè)置進行修改。

    VARCHART XGantt用戶手冊(.NET版):如何使用日歷(中)

    配置文件類型建議允許的間隔類型。例如,日期配置文件始終需要vcDayProfileInterval類型的間隔。

    VARCHART XGantt用戶手冊(.NET版):如何使用日歷(中)

    日歷配置文件可以顯示類型為日配置文件、周配置文件、年配置文件變量配置文件。在一天配置文件中,只能通過在一天的限制范圍內(nèi)的時鐘時間來定義間隔。一周配置文件包含要在某些天應(yīng)用的日期配置文件。年份配置文件分配選定的一天配置文件,這些配置文件適用于單個重復(fù)日期或幾個重復(fù)日期。變量配置文件包含一系列不同的工作時間。根據(jù)間隔類型vcCalendarInterval、vcDayProfileInterval、vcWeekProfileIntervalvcYearProfileIntervalvcVariableProfileInterval,僅對象的某些屬性是相關(guān)的。下表映射了概要文件類型和相關(guān)屬性。

    VARCHART XGantt用戶手冊(.NET版):如何使用日歷(中)

    CalendarInterval在精確定義的間隔中描述了唯一的時間跨度。例:2010年5月5日從11:30時到2010年9月15日17:00時。

    YearProfileInterval允許定義每年重復(fù)一次的天數(shù)或時間跨度。例:5月1日或12月24日至26日。

    WeekProfileInterval處理一周中的一天或幾天。例:星期六或星期一至星期五。

    DayProfileInterval處理一天之內(nèi)的時間規(guī)格。例:8.00時至17.00時。

    VariableProfile描述了時間跨度,而不引用定義的日期或時間。時間間隔的單位可以是天、小時、分鐘或秒,并且由時間間隔對象的屬性TimeUnit指定。示例:4小時。

    本教程內(nèi)容尚未完結(jié)哦,后續(xù)將會更新.NET版本中如何使用日歷的“如何使用日歷進行計算”,感興趣的朋友可以繼續(xù)關(guān)注我們哦~您也可以下載VARCHART XGantt免費版體驗一下~

    相關(guān)內(nèi)容推薦:

    VARCHART XGantt用戶手冊(.NET版):如何使用日歷(上)

    VARCHART XGantt用戶手冊>>>


    想要購買VARCHART XGantt正版授權(quán),或了解更多產(chǎn)品信息請點擊“咨詢在線客服”

    1024,慧都致敬程序員們,zend現(xiàn)金優(yōu)惠券限時放送,只剩最后一天了?。?!

    795×380-2.png


    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();