Click here to Skip to main content
Click here to Skip to main content

.NET TimePicker

By , 27 Jun 2007
 

Introduction

Did you ever used the DateTimePicker that comes with .NET? If so, you must appreciate the easy to use drop down calendar where you click on the date that you need. You can even navigate the months and the years very easily at the top of its panel. Every user that I know just loves this component.

The DateTimePicker can also be converted in a TimePicker. Unfortunately, I've never been satisfied with this TimePicker since it uses a numeric up-down control to select your time. There is no drop down feature. The user must manually type in his/her time and that has always bothers me. I asked myself if there could be an easier way to select a time.

With my TimePicker, this problem is solved. The TimePicker shows a drop down panel very similar to the DateTimePicker. Instead of having dates, you have hours and minutes on the panel. You click on the time that you want and then click outside of the panel to see the time being assigned to the TimePicker control.

TimePicker v2 finally complete

After 4 years, I finally decided to update the TimePicker. Based on the comments, it had a few bugs in it. I took the time to fix some of them and added a few new features to it. I tried to keep the same functionalities to avoid any breaking changes. If I broke something, I'm sorry. For people who would like a TimePicker for .NET 3.0 or on Vista, I haven't worked with those technologies (yet). Try it out and let me know.

New feature

  • KeyToHidePicker is a new property on the TimePicker. Assign a keyboard key to hide the picker. This is useful for people who want to hide the picker from the keyboard instead of clicking somewhere else. The default key is Esc.
  • Increasing the font size will make the control bigger. Earlier versions weren't doing this. Drop down button and check box will also resize.
  • Added the TimeChangeEventArgs class. When the Value property of the TimePicker changes, an event is launched with an instance of TimeChangeEventArgs. It holds the previous TimeSpan value and the new value. This might be the only breaking change. In the previous version, I was passing an EventArgs object.
  • When the check box is visible, it controls the enable or disable state of the time. When check box is not visible, the Enable property of the TimePicker controls the state of the TimePicker.

Fixes

  • I paint the time instead of using .NET controls. This gave me more control.
  • The minutes are now drawn correctly when TimePicker is in a tab page.
  • The separator between the hours and minutes is drawn correctly.
  • Refactored the code to make it more .NET 2.0. The classes are now partial with the UI components in their own separate file.
  • Changed the drop down arrow to look more like the one in the DateTimePicker.

How to install?

Simply add the DLL to the Visual Studio .NET toolbox. You will see an item named TimePicker at the very end. Just drag and drop this component on your form and you are ready to use the TimePicker.

How it works?

You simply click on the drop down arrow on the right side of the component to set the desired time. You then call the Value property to get that time. I use a TimeSpan to hold the time since the .NET Framework already has a structure to handle time values.

If you want a string representation of your time, you can use the ToString methods implemented in the TimePicker or you can throw back the TimeSpan in a DateTime structure and call its ToString which has a lot of predefined format.

Useful properties

TimePicker has a few interesting properties that I have added. Read the following to know how you can customize the TimePicker the way you want.

ButtonColor

You can choose the color of your choice for the buttons. This color will go on the buttons that are not selected.

Checked

Property that returns the state of the checkbox of the control

Format

A string that is parsed by the TimePicker. The format is responsible for displaying the time in the TimePicker control.

RightToLeft

Change this property if you want the time to be on the right side of your TimePicker.

ShowCheckBox

A boolean value to place a checkbox on the left side of the control. Clicking in the checkbox will enable the rest of the control.

ShowDropDown

A boolean value that makes the arrow on the right side of the component disappear. Since the user can click on the hours or the minutes, some developers might want to hide the drop down arrow.


SelectedColor

You can choose the color of your choice for the buttons that are selected.

Separator

A character is inserted here. Based on the preference of the developer, you can separate the hours from the minutes with any character that you want.

SeparatorColor

Don't confuse this property with Separator, they are not related. SeparatorColor is a color used to separate the hours from the minute in the panel. If you change the colors of the buttons with ButtonColor and SelectedColor, you might want to harmonize the display by choosing a color for the separator.

TimeSelector

An enum that changes the mode of the TimePicker. If you only want the hours to be displayed in the TimePicker, set this property to Hours. If you also want the minutes, select the Minutes value and if you want both, choose HoursAndMinutes. For people who want to use TimePicker to pick seconds, just use the Minutes value and place a label next to it called Seconds.

Value

The Value property is a TimeSpan structure. It holds the time that you have set with the user interface. You can change it with my very own TimePicker interface by clicking on it like in the picture below.

Tips'n'tricks

  • You can change the Value property with my very own TimePicker. Since the TimePicker is shown in modal mode, you have to click on the separator to hide the form.
  • Instead of always clicking the drop down arrow, you can click directly the hours or the minutes.
  • Don't bother to change the format string if you change the separator. My component will update itself when you change a property.
  • If you only want to see the hours in the TimePicker, change the TimeSelector property to Hours. The same goes for the minutes.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Louis-Philippe Carignan
Web Developer
Canada Canada
I'm a software engineer with 5 years of experience. I've been writting code mostly in .NET. My fields of expertise revolves around Windows Forms, Remoting, Xml, database connectivity, CompactFramework and GIS applications.
 
I'm an early adopter of Test Driven Developpement and Continuous Integration. I worked with tools such as Test Driven .NET, Cruise Control .NET, NAnt, NUnit and NCover. I am involved with the Agile user group in my city. My main area of interest is with lean software development but I do value other methodologies as well.
 
You can read my blog about lean software. It's mostly in French but I do have a few posts in English.
http://blogs.agilequebec.ca/blogs/lpcarignan/default.aspx
 
I'm always open to job offers. I am open to senior software engineer or achitect positions. If you are looking for someone with my profile, send me an e-mail. I am willing to relocate.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 5memberMojtaba Rezaeian30-Sep-11 5:25 
Thank You:X
Questionuse in web projectmembermonu nair29-Sep-11 5:05 
can we use it in web project
mannu

GeneralWill it work with an ASP.NET page? thanks!membermaximus.dec.meridius11-Oct-10 11:57 
Thank you
QuestionHow to download the time picker installer?memberatinfatima9-Oct-10 23:03 
hello. i'm a beginner. Can you brief me on how to download this software so that I can use it in visual studio. I cant find the .dll file.
GeneralPicking seconds doesn't work.membersss_golovko13-Mar-09 2:02 
"...who want to use TimePicker to pick seconds, just use the Minutes value and place a label next to it called Seconds". - this doesn't work. I've downloaded demo-project and tried to follow this advice but got no luck.
GeneralRe: Picking seconds doesn't work.memberLouis-Philippe Carignan16-Mar-09 16:54 
Good you be more specific on what is not working exactly?
GeneralRe: Picking seconds doesn't work.membersss_golovko17-Mar-09 8:30 
The label called Seconds behaves like simple label control: it displays the text from text property and no seconds and picking availability.
Generaltimepicker installation problemmemberfloko11-Nov-08 3:49 
Hi,
first I wanna say, that i'm not really expert, but I'm learning.
I was searching for a tool like timepicker to use it in MS Excel 2007. Unfortunaltely I was not able to install/use it in Excel. There was just a "dll" in the demo file. In the source file there was not one. (I tried to use the one in the Demo file, but that did not work, either.
Can you help me?
With greetings
Floko
GeneralRe: timepicker installation problemmemberLouis-Philippe Carignan12-Nov-08 1:14 
Hi Fioko,
 
Could you tell me what the error was? The dll in the Zip is build with .NET 2.0. Maybe something special is required with Office 2007. Maybe you have to put a reference to an Office dll or put a special method in the TimePicker projet. I haven't done any .NET for Office. I just moved to Framework 3.5.
 
What about rebuilding the code in VS 2008? Did that work? Can you then put it in a normal .NET project, let's say a Windows Forms project?
 
Louis
AnswerProperly show hours(0-23) and minutes(0-59) in .net2.0 vs2005memberSimeonVelichkov24-Jun-08 2:59 
Put this:
            for (int i = 0; i < this.Controls.Count; i++)
            {
                Button btn = this.Controls[i] as Button;
                if (btn != null)
                {
                    btn.UseCompatibleTextRendering = true;
                }
            }
in HourMinuteSelectorForm.cs, HourSelectorForm.cs, MinuteSelectorForm.cs constructors. Shucks | :->
GeneralRe: Properly show hours(0-23) and minutes(0-59) in .net2.0 vs2005memberehrenberg20-Nov-08 1:41 
Works!
 
Thank you! Big Grin | :-D
GeneralTimeSpan greater than 24 hoursmemberMichael Kämpf6-Apr-08 23:07 
How to use the TimePicker to allow TimeSpans greater than 24 hours?
GeneralI used listboxesmemberndennisv27-Jan-08 7:55 
I used two listboxes side by side on a panel. Set the listboxes to multicolumn and the panel.visible to false until a textbox is clicked.
 
You'll need to adjust the listboxes width and height to get the column count right.
 
After the minutes is selected the panel.visible = false.
 
The code shown here uses two textboxes needed for a start and end time.
 
Dennis

bool startclicked = false;
 
string[] h = {
"00","04","08","12","16","20",
"01","05","09","13","17","21",
"02","06","10","14","18","22",
"03","07","11","15","19","23" };
string[] m = {
"00","10","20","30","40","50",
"01","11","21","31","41","51",
"02","12","22","32","42","52",
"03","13","23","33","43","53",
"04","14","24","34","44","54",
"05","15","25","35","45","55",
"06","16","26","36","46","56",
"07","17","27","37","47","57",
"08","18","28","38","48","58",
"09","19","29","39","49","59" };
 
for (int i = 0; i < h.Length; ++i) HourlistBox.Items.Add(h[i]);
for (int i = 0; i < m.Length; ++i) MinutelistBox.Items.Add(m[i]);
 
HourlistBox.ColumnWidth = 30;
MinutelistBox.ColumnWidth = 30;
 
private void StartTimetextBox_Click(object sender, EventArgs e)
{
Timepanel.Visible = true;
startclicked = true;
}
 
private void EndTimetextBox_Click(object sender, EventArgs e)
{
Timepanel.Visible = true;
startclicked = false;
}
 
private void SetHour(object sender, bool wasminute)
{
string h = "00";
try
{
h = HourlistBox.SelectedItem.ToString();
}
catch { }
string m = "00";
try
{
m = MinutelistBox.SelectedItem.ToString();
}
catch { }
if(startclicked == true) StartTimetextBox.Text = h + ":" + m;
else EndTimetextBox.Text = h + ":" + m;
if (wasminute) Timepanel.Visible = false;
}
 
private void HourlistBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (HourlistBox.SelectedIndex == -1) return;
SetHour(sender, false);
}
 
private void MinutelistBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (MinutelistBox.SelectedIndex == -1) return;
SetHour(sender, true);
}

QuestionApp on Second Monitor Control Paints on First Monitormemberlodlaiden14-Aug-07 12:12 
I was testing out this control to see if it would work for my app and it was fine until I moved the app over to the second monitor so i could tweak some code. The form shows up all the way to the right on the first window. The vertical position is correct, but not the horizontal.
 
The answer to your problem may not be the answer to your question. --Me--

QuestionFontsize problemmemberChristoph Herrmann1-Jul-07 22:47 
Hi!
I experienced a problem with the font size in the dropdown menu:
The numbers above 9 are not shown completely. There is just the first digit shown.
In the demo everythig is fine, though...
So I changed the fontsize down to 6, so that I was able to work with it, but thats non-durabale solution i think...
Is this problem know to anyone else?
 
Greeting
 
Christoph
AnswerRe: Fontsize problemmemberLouis-Philippe Carignan2-Jul-07 3:41 
Hi Christoph,
 
I did notice this problem in the Designer inside VS .NET 2005. I have no clue why it behaves this way. I did put time into investigating this matter. When used in an application (i.e. the demo app), it works fine. It's the same code so it should work. My impression was maybe a different drawing engine is used inside VS .NET.
 
Louis-Philippe Carignan
 

AnswerRe: Fontsize problemmemberChristoph Herrmann2-Jul-07 4:15 
Thank You for the answer!
I just found the solution:
I had CompatibleTextRenderingDefault set to "false":
 
Application.SetCompatibleTextRenderingDefault(false);
 
Now, when its "true", everything works fine.
(.NET default it is "true", I think.)
 
So it really semms to be a problem with the .NET designer. Not a different drawing engine, but a different way of drawing.
 
Greeting
 
Christoph

GeneralRelated TimePickermemberVasudevan Deepak Kumar27-Jun-07 23:02 
There was a related Urdu Timepicker I saw in CP forums. Can be there some move to bring all these under a single umbrella and each language as a configuration directive?
 
Vasudevan Deepak Kumar
Personal Homepage
Tech Gossips

GeneralRe: Related TimePickermemberLouis-Philippe Carignan28-Jun-07 12:09 
Hi,
 
I did a search on the word "urdu" and found a DateTimePicker and a Textbox for Urdu. Nothing on a TimePicker. My control doesn't show any dates, only times. While I am not familiar with the Urdu language, I would believe time is displayed with arabic numbers. But I could be wrong.
 
If possible, could you point me to the actual TimePicker in Urdu?
 
Louis-Philippe
GeneralNice, but....membermenenedezpoo27-Jun-07 11:21 
I think that's a good aproach to making it easy to select a time, but, folowing the "Calendar" approach for date picking, a "Clock face" would meet the need for a time picking, don't you think?
 
In my opinion, a control like yours could bring usability problems:
- Users may not instantly learn how to use the control
- There are just too many options in the drop down view, and user can become overwhelmed
 

I know that your work requires a good effort, but the control may be just not good enough to be included in a project, I would rather keep the DateTimePicker option.
 
Don't take it personal, it's just a professional point of view.
 
Jm

GeneralVery Coolmembermerlin98127-Jun-07 10:52 
This is a nice way to represent time. Thanks for sharing this.
 


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
I'm paid to surf the web. Are you?

I get my developer tools from Merlin A.I. Soft

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

GeneralTimePicker - Plz Help Me....memberVeesam Suresh Kumar11-Jun-07 19:22 
Hai,
I'm a beginner of ASP.NET 2.0
The .Net TimePicker control is good. But this control is in the previous version of ASP.NET. So, Its little bit tough to understand for me. And I'm also doing small project on Timesheet. Where employees should enter their Start Time, End Time, Break Time.So, if you provide me the code that will be very helpful for my project.So please provide me the code in newer version of it.Thank You in Advance...
 

-- modified at 1:33 Saturday 16th June, 2007
QuestionHow user can exit from time picker only using keyboard?memberEmil15006-May-07 20:08 
My name is Emilia,I'm a C# developer.I've used TimePicker control in my App.Thanks a lot for sharing this control.I have a question:
How user can exit from time picker only using keyboard?I could not handle this,would you please help me?Smile | :)
Thanks alot
AnswerRe: How user can exit from time picker only using keyboard?memberLouis-Philippe Carignan7-May-07 11:13 
Good question! I never thought about this one. I would recommend adding a delegate to the KeyPress event on each button. I tried adding a delegate to the KeyPress event of the form on which all the buttons reside. No luck! Nothing happens.
 
So, short answer would be to add the delegate to the KeyPress event of each button. You could then define a default key (the Spacebar comes to mind) to close the picker. You could put more logic to move the focus on a button when a key is pressed. For example, pressing 9 would put the focus on the button named '9' and so on. Maybe a property where you can accept key strokes would be of value.
 
I am planning on migrating the control to 2.0 and 3.0 this Fall. As always, lots on my plate.
GeneralRe: How user can exit from time picker only using keyboard?memberEmil150013-May-07 0:23 
Thanks a lot,I'll try it.
GeneralThanks..memberupadhyaynidhi29-Jan-07 19:59 
Big Grin | :-D Its really nice....
I have used it in my app.
so Thanks Smile | :)
 
nidhi

QuestionHaving an issue with controlmemberDeepabh24-Mar-06 11:00 
hi. i m getting an issue. when i m runnin on .net framwork version 1.1 it is working fine.But when i m running under framework version 2.0, the control is not comming properly. only single digit are appearing on the control when drop down is clicked. In case of Hrs for 0-9 on 0 is appearing , for 10-19 only 1 is appearing and 20-24 only 2 is appearing. Similarly for Min. The value selected appears correctly . i hope i m able to put my issue clearly. Whats going wrong ?
 
Deepabh
 

AnswerRe: Having an issue with controlmemberOlli Nissinen11-May-06 7:26 
I'm facing the same problems. I love the control and I have used this control for a long time with .NET 1.1 and after updating to 2.0 it suddenly doesn't work.
 
I converted the control to VS2005 and noticed that the forms are just too small, so if you change the font to 7 you can see all the numbers.
 
But my C# skills are so bad that I couldn't solve other problems I'm facing with this control in VS2005 and build a working dll.
 
So please if there is someone with some C# skills this control would be usable again with a reasonable amount of work.
GeneralRe: Having an issue with controlmemberRudolf Jan Heijink25-Mar-07 7:38 
I also tried to increase the size of the individual buttons. It did not solve the problem completely. A dsadvantage is that the size of the control increases. I decided not to use it for that reason.
GeneralRe: Having an issue with controlmemberlodlaiden14-Aug-07 12:09 
You have to go into all 3 forms, set the labels text position to be MID LEFT justified (instead of MID CENTER) Then set the labels to AutoSize = True.
All the labels now show correctly.

 
The answer to your problem may not be the answer to your question. --Me--

General.Net TimePicker for Web!memberdipesh_batheja6-Mar-06 2:49 
Hi everyone,
I saw many of you are looking for similar implementations for web pages. You may want to check out the control that I have developed for ASP.Net 2.0. You can get it from my blog http://dipeshbatheja.blogspot.com/.
 
ENJOY!
Dipesh Batheja
GeneralTab Controlmembervic_bkk1-Mar-06 16:46 
Hi
 
Did anyone find a fix for Timepicker not working on a Tab Control Page?
 

GeneralWeb From Controlmemberpgorbas31-Jan-06 5:25 
How about a version of this control that works in Web Pages - a WebForm control?Roll eyes | :rolleyes:
It seems most people leave out web support.Frown | :(
QuestionCopy-paste bug?sussMiha Grcar23-Dec-04 3:54 
A quick question 4 the author: I found that both forms (the one where you set hours and the one where you set minutes) have ResetMinutes property. What good does that do on the minute selector form? Is that a copy-paste bug or am I missing sth?
Thanks and happy hollidays,
Miha
GeneralRightToLeft and negative valuesmemberHez25-Jun-04 2:07 
The control is great, thanks for sharing it. Has been really helpful as I needed something that would work with a TimeSpan value rather than DateTime as I needed to display negative time values.
 
The only problem I had was that the negative sign was being displayed on the wrong side, I found that RightToLeft was set to Yes for both the hour and minute labels in the designer code.
 
I have made some small changes to the TimePicker.cs code to display negative values correctly.
 
I only changed the 24 hour formats as I thought the 12 hour formats wouldn't be appropriate for negative values anyway.
 
Here's the changes:
 

private static String NEG_ZERO = "-0";
 
private void GenerateFormatedText(TimeSpan oSelectedTime)
 
{
 
     ...
    
    
     // This section parse the hours
     if (l_aTimes[0].Equals(HH))
     {
          // The format is from 00 to 24
          if((l_nHour < 0) && (l_nHour > -10))
          {
               m_oLnkHours.Text = NEG_ZERO;
               l_nHour = Math.Abs(l_nHour);
          }
          else if((l_nHour < 10) && (l_nHour >= 0))
          {
               m_oLnkHours.Text = ZERO;
          }
 
          m_oLnkHours.Text += Convert.ToString(l_nHour);
          m_oLnkAMPM.Visible = false;
     }
    
    
     ...
 

     if (l_aTimes[1].Equals(MM))
     {
          // The format is 00 to 59
          if(l_nMinute < 0)
          {
               if(m_oLnkHours.Text[0] != '-')
               {
                    m_oLnkHours.Text = string.Format("-{0}", m_oLnkHours.Text);
               }
               l_nMinute = Math.Abs(l_nMinute);
          }
         
          if ((l_nMinute < 10) && (l_nMinute >= 0))
          {
               m_oLnkMinutes.Text = ZERO;
          }
 
          m_oLnkMinutes.Text += Convert.ToString(l_nMinute);
     }
    
              
     ...
 

private void InitializeComponent()
{
 
     ...
    
    
     //
     // m_oLnkHours
     //
 
     m_oLnkHours.TextAlign = ContentAlignment.TopRight;
 
     //
     // m_oLnkMinutes
     //
    
     m_oLnkMinutes.TextAlign = ContentAlignment.TopRight;
 
Cool | :cool:
GeneralProblem with TimePicker on a TabControlmemberOppie23-May-04 5:31 
Nice control! I'd like to use it, but I have found a problem. When the TimePicker is placed on a tabPage of a TabControl, the TimePicker only shows the seperator and the minutes. The hours are not visible. However, the dropdown part of the control works fine. What can I do to make the control work on a tabPage?
GeneralRe: Problem with TimePicker on a TabControlmemberjrl01528-Sep-04 7:32 
Has anyone fixed the problem when the TimePicker is
placed on a tabPage of a TabControl???Confused | :confused:
GeneralRe: Problem with TimePicker on a TabControlmemberkross123428-Apr-05 2:15 
Has anybody a solution for this problem?
GeneralRe: Problem with TimePicker on a TabControlmembereatwork28-Nov-05 10:36 
Was wondering if anyone has found a solution to this problem? thank you.
 
eatwork
GeneralRe: Problem with TimePicker on a TabControlmemberdong826-Feb-07 8:39 
Check the initiallization of TimePicker and you'll probably see something like below.
(StartTime is an instance of TimePicker)
 
this.StartTime.BackColor = System.Drawing.Color.Transparent;
this.StartTime.ButtonColor = System.Drawing.SystemColors.Control;
this.StartTime.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F,
this.StartTime.Location = new System.Drawing.Point(624, 426);
this.StartTime.Name = "StartTime";
this.StartTime.SelectedColor = System.Drawing.Color.White;
this.StartTime.SeparatorColor = System.Drawing.Color.Black;
this.StartTime.Size = new System.Drawing.Size(134, 22);
this.StartTime.TabIndex = 313;
 
this.StartTime.Format = "hh:MM";
this.StartTime.Margin = new System.Windows.Forms.Padding(0);
this.StartTime.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.StartTime.Value = System.TimeSpan.Parse("11:59:00");
 
I happened to move the LAST 4 LINES above the line
this.tabPage2.Controls.Add(this.StartTime);
, while those 4 lines were originally located under the line.
 
It's now working.Laugh | :laugh:
 


GeneralSupport for secondssussPrashant Bhagat9-Apr-04 12:11 
Do you have a version with support for seconds? If not, how easily can I extend your library to add such a support?
-Thanks
GeneralRe: Support for secondssussMiha Grcar23-Dec-04 3:50 
It's easy to extend. Create yr own control, add two TimePickers onto it. The first one is to select hours and minutes and the second one to select seconds. Just set the second one's TimeSelector to Minutes (and treat them as seconds of course) ... If you want the control that alreay does all this please let me know (by replying) and I will send it to you.
Miha
GeneralRe: Support for secondsmemberDavid Boland12-Jul-05 5:13 
Could you add a TimeSelector value for half hour intervals i.e 00:00, 00:30, 01:00 etc?
GeneralRe: Support for secondsmembereatwork28-Nov-05 10:46 
Would I be able to get your modified time picker control? thanks
 
eatwork
GeneralTimePicker as a Web Controlmemberpmpjr22-Sep-03 9:46 
Do you have your TimePicker control (presented here as a Windows Form control) for ASP.NET?
GeneralRe: TimePicker as a Web Controlmemberdipesh_batheja31-Dec-05 2:09 
Hi I have developed a similer control for ASP.net 2.0 (works for IE 5.5+). If you need a copy or more info mail me at dipesh_batheja@yahoo.com.

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web03 | 2.6.130617.1 | Last Updated 27 Jun 2007
Article Copyright 2003 by Louis-Philippe Carignan
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid