Print Page | Close Window

HOWTO: Select Same Time Period for Multiple Days

Printed From: Codejock Forums
Category: Codejock Products
Forum Name: Calendar
Forum Description: Topics Related to Codejock Calendar
URL: http://forum.codejock.com/forum_posts.asp?TID=5203
Printed Date: 11 May 2024 at 1:43am
Software Version: Web Wiz Forums 12.04 - http://www.webwizforums.com


Topic: HOWTO: Select Same Time Period for Multiple Days
Posted By: DDJJ
Subject: HOWTO: Select Same Time Period for Multiple Days
Date Posted: 03 October 2006 at 11:12am
I'm having a problem figuring out how to select multiple time periods using the calendar control.
 
I can see how the user might select a time period that crosses two dates (select two dates in DatePicker, click on a time on the first date while then holding the SHIFT key down and selecting a time in the second day).
 
But, let's say a user wanted to select the period 8 AM to 11 AM for all days of one week (M - F).  I have no problem selecting M-F in DatePicker, and having the 5 days displayed in the calendar, but I can't get the 8 AM to 11 AM time frame selected for all days.
 
Is there a way to do this?
 
Thanks.
 
Dan



Replies:
Posted By: DDJJ
Date Posted: 03 October 2006 at 11:33am
BTW, I did figure out how to select M-F in the datepicker, select 8 AM to 11 AM for Monday (and enter description), then COPY the selected event to the other four days of the week.  But is there a quicker way to do this where you enter the description once, and have it automatically copied to the other dates (same description, same time period)?
 
I'm guessing I'll have to provide the user with a command button to do this, but if there's an easier way...
 


Posted By: sserge
Date Posted: 03 October 2006 at 5:29pm
Hi,

Unfortunately no multi-time periods selection is not supported (no way to do this).
 
But:
 
1. See recurrence events in calendar. May be this will be useful for you.
 
2. Other way is to create a form (or a context nenu) which helps user to create such duplicated events.
 
3. Also try drag copy events (press Ctrl button and move event by mouse).
 
4. See notifications EventAdded, BeforeEditOperation, etc.
Using them you can show some dialog when new event added and ask user for other days to copy event to, or even copy it automatically for all visible days (or do some other tasks ...).
 
--
WBR,
Serge


Posted By: DDJJ
Date Posted: 03 October 2006 at 5:50pm
Thanks Serge.
 
I think I will just add a button allowing the user to copy selected events to the same time period in any other currently selected days.
 
A related question:
 
I want to give users two ways of quickly selecting a time range on the calendar using a mouse, then creating an event.  The first way is for the user to select the time range, then merely start typing (I see how this is done).
 
For the second way, the user selects a time range, then merely presses their Enter key(no text associated with the event), and the event is created.  Where desired, the user can then select additional time ranges, hit enter, etc. etc.
 
I've been playing with this for awhile (in the CalendarControl_KeyDown event) and I don't see how you can it to work.  Can you give me some clues?
 
Thanks.
 


Posted By: DDJJ
Date Posted: 03 October 2006 at 6:06pm
To expand on my second question a bit...
 
We have no need to point the calendar control to a database.  In our app, we are only using the control to provide users with an easy way to enter their time ("create events" in CJ-speak), then write the time info to our app's database.
 
In testing this without ever pointing the control to a database, I know I've been able to create onscreen events which we can capture by merely typing something after selecting a time range.  So, I'm hoping to also be able to do so when the user just hits the Enter key.  Does this make sense?
 
 


Posted By: sserge
Date Posted: 04 October 2006 at 8:34am
Yes, all this does make sense. However, some theory below:

Calendar control has 2 layers:
    Data layer (events collection, and operations on it)
    Visualization layer (displaying, selecting, editing events, etc)
 
Calendar control always works with DataProvider (see corresponding interface).
DataProvider can be: memory, file (xml or binary), MS Access DB, Custom.
By default calendar creates Memory data provider.
 
You can use DataProvider to create/add/delete/change events.
 
------------

On Enter key down, get active selection start/end.
Using data provider create a new event, set its start/end times (also subject or anything) and add your event to the data provider.

I just played a little and think that Shift+Enter or Ctrl+Enter will be better than using simple Enter because Enter key ends subject editing and you override this.
 
EXAMPLE:

Private Sub CalendarControl_KeyDown(KeyCode As Integer, Shift As Integer)
 
    If KeyCode = 13 And CalendarControl.ActiveView.Selection.IsValid _
       And (Shift And vbShiftMask) <> 0 Then
   
        Dim pEvent As CalendarEvent
        Set pEvent = CalendarControl.DataProvider.CreateEvent
       
        pEvent.StartTime = CalendarControl.ActiveView.Selection.Begin
        pEvent.EndTime = CalendarControl.ActiveView.Selection.End
        pEvent.AllDayEvent = CalendarControl.ActiveView.Selection.AllDay
       
        CalendarControl.DataProvider.AddEvent pEvent
    End If
End Sub


--
WBR,
Serge


Posted By: DDJJ
Date Posted: 04 October 2006 at 12:37pm
OK, so it sounds like in my situation I'm using the default data provider (memory), which is fine.
 
I think I'm going to just use the Enter key.  As mentioned earlier, users can either (1) select a time range, then start typing, or (2) just hit the Enter key to select the time range as an event.  In the latter case, the user does not want to attach any kind of description to the related time, just wants to make sure the time is recorded.   Make sense?
 
Thanks, Serge.
 


Posted By: sserge
Date Posted: 04 October 2006 at 4:37pm
Yes, why not if this is suitable for you

--
WBR,
Serge


Posted By: DDJJ
Date Posted: 05 October 2006 at 11:20am
Serge, I think I'm now seeing what you meant regarding the Enter key.
 
If the user merely selects a time period on the calendar, then clicks the Enter key, I can handle that in code.
 
If on the other hand, the user selects a time period, then types something, my code for the first scenario is creating another Event, which I don't want.
 
Is there a way to check and see if the user has written something to the selected time period?  It's kind of odd...once the user starts typing, no Event is created I guess until after the user moves off of the selected time period (or presses the Enter key, which is where my problem is).
 
Let me know if I'm not describing my problem well.
 
Thanks!
 


Posted By: DDJJ
Date Posted: 05 October 2006 at 12:04pm
How about the following?
 
Dim m_EditInProgress                As Boolean
 
Private Sub CalendarControl1_BeforeEditOperation(ByVal OpParams As XtremeCalendarControl.CalendarEditOperationParameters, bCancelOperation As Boolean)
    m_EditInProgress = True
    
End Sub
 
Private Sub CalendarControl1_KeyDown(KeyCode As Integer, Shift As Integer)
    Dim pEvent As CalendarEvent
   
    If CalendarControl1.ActiveView.GetSelectedEvents.Count = 0 Then
        If KeyCode = vbKeyReturn And    CalendarControl1.ActiveView.Selection.IsValid Then
            If Not m_EditInProgress Then
                With CalendarControl1
                    Set pEvent = .DataProvider.CreateEvent
                    pEvent.StartTime = .ActiveView.Selection.Begin
                    pEvent.EndTime = .ActiveView.Selection.End
                    pEvent.AllDayEvent = .ActiveView.Selection.AllDay
                    .DataProvider.AddEvent pEvent
                End With
            Else
                m_EditInProgress = False
            End If
        End If
    End If
End Sub
 
Private Sub CalendarControl1_SelectionChanged(ByVal SelType As XtremeCalendarControl.CalendarSelectionChanged)
    
    m_EditInProgress = False  'just to make sure...
End Sub
 
Seems to work OK...
 


Posted By: DDJJ
Date Posted: 05 October 2006 at 12:07pm
Need to delete that "m_EditInProgress = False" in the KeyDown event I think.


Posted By: sserge
Date Posted: 06 October 2006 at 4:27am
Yes, you're right.
But you have to reset m_EditInProgress when inplace event editing is finished or canceled.
 
You can do this in EventAdded, EventChanged notifications, and when ESC key is pressed (may be is some other places as well)

--
WBR,
Serge
 



Print Page | Close Window

Forum Software by Web Wiz Forums® version 12.04 - http://www.webwizforums.com
Copyright ©2001-2021 Web Wiz Ltd. - https://www.webwiz.net