| 
 
using 
System; 
using 
System.Collections.Generic; 
using 
System.ComponentModel; 
using 
System.Data; 
using 
System.Drawing; 
using 
System.Text; 
using 
System.Windows.Forms; 
using 
Dbi.WinControl.Schedule; 
  
namespace 
TimeBarCollectionCsharp 
{ 
    
public partial
class Form1 
: Form 
    { 
           
//Declare the global variable for storing a 
secondary handle to every TimeBar loaded/added in to the dbiSchedule control. 
       
private System.Collections.Generic.List<dbiTimeBarItem> 
globalTimeBarCollection = new 
System.Collections.Generic.List<dbiTimeBarItem>(); 
  
       
public Form1() 
       
{ 
           
InitializeComponent(); 
       
} 
  
       
private void 
DbiSchedule1_AfterTimeBarInserted(object 
sender, AfterTimeBarInsertedEventArgs e) 
       
{ 
           
//After a timebar is inserted in to the 
control (through user interaction), it needs to be added to the global 
collection. 
           
globalTimeBarCollection.Add(e.TimeBarItem); 
  
           
//This is done in the AfterTimeBarInserted 
event, to ensure there is a proper reference to the timebar that now exists 
inside the control. 
       
} 
  
       
private void 
DbiSchedule1_BeforeTimeBarRemove(object sender,
BeforeTimeBarRemoveEventArgs e) 
       
{ 
           
//Before the timebar is removed from the 
control, remove it from the global collection. 
           
globalTimeBarCollection.Remove(e.TimeBarItem); 
  
           
//This is done in the BeforeTimeBarRemove 
event, to ensure there is still a valid handle to the timebar object to remove 
it from the 
           
//global collection. 
  
           
//If attempted from the AfterTimeBarRemove, 
there would no longer be an actual reference to the object, and additional code 
would need to 
           
//be used to determine which timebar needs to 
be removed from the global collection. 
       
} 
					
					 
       
private void 
DbiSchedule1_FirstDraw(object sender,
FirstDrawEventArgs e) 
        { 
           
int cntItem; 
  
           
dbiScheduleObject curSched =
new 
dbiScheduleObject(); 
  
           
curSched.Start = new
DateTime(2023, 1, 1); 
           
curSched.End = new
DateTime(2024, 1, 1); 
           
curSched.TimeType = enumTimeType.Days; 
           
curSched.DisplayTimeBarDates = true; 
  
           
//The datetime pickers are synched with the 
date range of the dbiScheduleObject being used. 
           
this.DateTimePicker1.MinDate = 
curSched.Start; 
           
this.DateTimePicker1.MaxDate = 
curSched.End; 
           
this.DateTimePicker1.Value = 
curSched.Start; 
           
this.DateTimePicker2.MinDate = 
curSched.Start; 
           
this.DateTimePicker2.MaxDate = 
curSched.End; 
           
this.DateTimePicker2.Value = 
curSched.End; 
  
           
this.DbiSchedule1.Schedules.Add(curSched); 
  
           
Random randGen; 
           
randGen = new
Random(2360); 
  
           
for (cntItem = 1;cntItem<=10;cntItem++) 
           
{ 
               
dbiScheduleItem newItem =
new 
dbiScheduleItem(); 
               
newItem.Text = "Test " + 
cntItem.ToString(); 
  
               
dbiTimeBarItem newTimeBar =
new dbiTimeBarItem(); 
               
newTimeBar.Start = curSched.Start.AddDays(randGen.Next(6)); 
               
newTimeBar.End = newTimeBar.Start.AddDays(randGen.Next(6)); 
               
newItem.TimeBars.Add(newTimeBar); 
               
//After a timebar is added to an internal 
collection through code, it must also be added to the global collection. 
               
globalTimeBarCollection.Add(newTimeBar); 
  
               
newTimeBar = new
dbiTimeBarItem(); 
               
newTimeBar.Start = curSched.Start.AddDays(randGen.Next(6) + 12); 
               
newTimeBar.End = newTimeBar.Start.AddDays(randGen.Next(6)); 
               
newItem.TimeBars.Add(newTimeBar); 
               
//After a timebar is added to an internal 
collection through code, it must also be added to the global collection. 
               
globalTimeBarCollection.Add(newTimeBar); 
  
               
this.DbiSchedule1.Items.Add(newItem); 
           
} 
  
       
DbiSchedule1.BarSelectBackColor = 
SystemColors.Highlight; 
       
} 
  
       
private void 
Button1_Click(object sender,
EventArgs e) 
       
{ 
           
//Unselect all the currently selected timebars 
in the control 
           
foreach(dbiTimeBarItem 
curSelTimeBar in this.DbiSchedule1.SelectedTimeBars()) 
           
{ 
               
curSelTimeBar.IsSelected = false; 
           
} 
  
           
int TotalTimeBarCount = 0; 
  
           
//Loop through all the timebars stored in the 
global collection 
           
//if any of them intersect with the current 
date range selected in the datetimepickers, they will be selected and counted 
           
//After the loop finishes, the total amount of 
timebars that intersect with the date range, will be displayed in the textbox. 
           
foreach (dbiTimeBarItem 
curTimeBar in globalTimeBarCollection) 
           
{ 
               
bool inRange = 
false; 
  
               
if ((curTimeBar.Start.Date == 
DateTimePicker1.Value.Date) || (curTimeBar.End.Date == 
DateTimePicker2.Value.Date)) 
               
{ 
                   
inRange = true; 
               
} 
  
               
if ((curTimeBar.Start.Date == 
DateTimePicker2.Value.Date) || (curTimeBar.End.Date == 
DateTimePicker1.Value.Date))  
               
{ 
                   
inRange = true; 
               
} 
  
               
if (curTimeBar.Start.Date < 
DateTimePicker1.Value.Date) 
               
{ 
  
                   
if ((curTimeBar.End.Date > 
DateTimePicker1.Value.Date) && (curTimeBar.End.Date < 
DateTimePicker2.Value.Date)) 
                   
{ 
                       
inRange = true; 
                   
} 
                   
 
                   
if (curTimeBar.End.Date > 
DateTimePicker2.Value.Date) 
                   
{ 
                       
inRange = true; 
                   
} 
               
} 
               
else 
               
{ 
                   
if ((DateTimePicker2.Value.Date > 
curTimeBar.Start.Date) && (DateTimePicker2.Value.Date < curTimeBar.End.Date)) 
                   
{ 
                       
inRange = true; 
                   
} 
  
                   
if (DateTimePicker2.Value.Date > 
curTimeBar.End.Date) 
                   
{ 
                       
inRange = true; 
                   
} 
               
} 
  
               
//The TimeBar was determined to be within the 
Date Range identified by the two DatePickers. 
               
//The count of total TimeBars within the range 
is incremented, and the TimeBar is selected. 
               
if (inRange) 
               
{ 
                   
TotalTimeBarCount = TotalTimeBarCount + 1; 
                   
curTimeBar.IsSelected = true; 
               
} 
  
           
} 
  
           
this.TextBox1.Text =
"TimeBars within Range = " + 
TotalTimeBarCount.ToString(); 
       
} 
  
    } 
} 
					 |