Introduction
This article describes an easy approach to implementing 
day and night modes of display operation; the example described addresses an 
approach to swapping between a custom color scheme and the default color scheme 
applied to the operating system and for that reason it could be applied to a 
number of different designs. The concept of creating alternative night modes of 
operations for displays is not new; it has been around in aircraft and 
automobiles for many years. Night modes of display operation offer a way in 
which displays may be used in darkness and when interference with the user's 
night vision is an issue.
Maintaining night vision requires the avoidance of 
light; any source of light can bleach out vision purple and even a dark 
accommodated display can cause this reaction quite rapidly. Once destroyed, it 
takes about thirty minutes for the human eye to become dark adapted again. While 
it is not possible to make a backlit display such as the LCD displays typically 
found on laptops and tablets entirely safe for night use, it is possible to 
reduce the effect of the emission by darkening the display to the maximum extent 
practical.
Altering the color scheme is beneficial but to make the 
display safer for night use, it may also be advisable to reduce the brightness 
of the illumination source. Military displays intended for use in environments 
where night vision imaging systems (NVIS) are to be used with the equipment will 
typically offer a mode of operation where the brightness is reduced to eliminate 
interference with the use of the NVIS device; this is also typical in 
automobiles where turning on the headlights also reduces the brightness of the 
illuminated displays in the instrument panel.
The demonstration project only alters the color scheme. 
When night mode is selected, the field areas of the controls are converted to 
black and most of the foreground color is converted to green. Without regard to 
contrast, the human eye is tuned to see the color green better than other colors 
and specifically green in about the 450 nanometers of wavelength range. It is no 
accident that early display monitors used phosphors that emit light in this 
range. As you shift from green to blue-green (e.g., about 480 nanometers of 
wavelength) the color becomes more saturated and the contrast ratio declines 
which makes characters rendered in this color less legible on a black 
background. It is a common misconception that red makes a good color for 
rendering text on a black background but red is a highly saturated color and it 
too is difficult to read when displayed on a black background due to the 
contrast ratio. Naturally white on black or black on white offers the highest 
contrast ratio but white is a worst case color for this sort of mode of 
operation and should be used sparingly.
![DayNight1.gif]()
Figure 1. Day Use of Sample Application
![DayNight2.gif]()
Figure 2. Night Use of Sample Application
Getting Started
In order to get started, unzip the included project and 
open the solution in the Visual Studio 2005 environment. In the solution 
explorer, you should note the following:
![DayNight3.gif]()
Figure 3. Solution Explorer
As you can see, there is only a single form contained 
in this Windows application project (Form1.vb). The only additional reference 
added to the project was System.Drawing.Color; all else is per the default 
configuration for a form class.
There is not much to the design of the form; it merely contains a set of 
controls used to demonstrate the transition from day to night modes of 
operation. These controls do not do anything (unless you are interested in 
learning the phonetic alphabet):
![DayNight4.gif]()
Figure 4. The Main Form Designer
The Code: Main Form (frmMain.vb)
The main form class includes one import which is 
necessary to support the sample application:
Imports 
System.Drawing.Color
The color class import is used to allow the application 
to manipulate the control colors.
The first block of code in the application is used to 
terminate the demonstration application whenever the user clicks the form's 
"Exit" button:
Public
Class Form1
 
   
Private Sub 
Button1_Click(ByVal sender
As System.Object, 
ByVal e As 
    System.EventArgs)
Handles Button1.Click
        Application.Exit()
   
End Sub
Following the exit button click event handler, the next 
block of code is used to handle the click event of the Day mode menu option; 
there are a total of three modes of operation (day, night, and auto):
Private
Sub tspDay_Click(ByVal 
sender As System.Object,
ByVal e As
System.EventArgs)
Handles tspDay.Click
 
   
Me.tspAuto.Checked = 
False
   
Me.tspNight.Checked = 
False
    Timer1.Enabled =
False
 
   
Dim obj As
Object
 
   
For Each obj
In Me.Controls
        obj.ForeColor = 
Control.DefaultForeColor
        obj.BackColor = 
Control.DefaultBackColor
 
       
If TypeOf obj
Is TextBox Then
            obj.BackColor = 
Color.White
       
End If
 
       
If TypeOf obj
Is ComboBox Then
            obj.BackColor = 
Color.White
       
End If
 
       
If TypeOf obj
Is ListBox Then
            obj.BackColor = 
Color.White
       
End If
   
Next
 
   
Me.BackColor = Control.DefaultBackColor
   
Me.ForeColor = Control.DefaultForeColor
 
End
Sub
The code is simple enough, the first part of the block 
is used to update the check marks in the menu and to disable a timer control 
used to poll for the time whenever the Auto mode of operation is selected. Next, 
the control collection is evaluated and the control has its foreground and 
background color properties set to the default control foreground and background 
colors. Since the text box, combo box, and list box controls are normally white, 
the current control is evaluated to see if it falls into one of these three 
categories and if it does, the background color is set to white. Lastly, the 
form background and foreground colors are also set to the default options. If 
you employ other controls on your form with similar requirements, you'd want to 
perform similar checks on those controls as well.
The next block of code is used to handle the night menu 
option click event:
Private
Sub tspNight_Click(ByVal 
sender As System.Object,
ByVal e As
System.EventArgs)
Handles tspNight.Click
 
   
Me.tspAuto.Checked = 
False
   
Me.tspDay.Checked = 
False
    Timer1.Enabled =
False
 
   
Dim obj As
Object
 
   
For Each obj
In Me.Controls
        obj.ForeColor = 
Color.Lime
        obj.BackColor = 
Color.Black
   
Next
 
   
Me.BackColor = Color.Black
   
Me.ForeColor = Color.Lime
 
End
Sub
This event handler works pretty much the same as the 
day option does, however, all of the controls are set to black backgrounds with 
lime green foreground colors.
The last bit of code in the demo is used to implement 
the Auto mode of operation. Since I don't have photo sensors installed on my 
machine, I have to use some other mechanism to determine whether or not the 
display should be set to day or night. I opted to use a timer control for this 
purpose; when enabled the timer evaluates the current time to determine if it 
should display the form in the night or day mode of operation; the menu click 
event handler merely updates the menu and enables the timer; the timer (shown 
after this first block) actually does the work of checking the time on interval 
and updating the display according to the time of day. In the example shown, the 
current hour is evaluated to determine whether or not the time is between 5 PM 
and 5 AM:
Private
Sub tspAuto_Click(ByVal 
sender As System.Object,
ByVal e As
System.EventArgs)
Handles tspAuto.Click
 
   
Me.tspNight.Checked = 
False
   
Me.tspDay.Checked = 
False
 
    Timer1.Enabled =
True
 
End
Sub
 
Private
Sub Timer1_Tick(ByVal 
sender As System.Object,
ByVal e As
System.EventArgs)
Handles Timer1.Tick
 
   
If Now.Hour > 17 Or 
Now.Hour < 5 Then
 
       
'night rules
       
Dim obj As
Object
 
       
For Each obj
In Me.Controls
            obj.ForeColor = 
Color.Lime
            obj.BackColor = 
Color.Black
       
Next
 
       
Me.BackColor = Color.Black
       
Me.ForeColor = Color.Lime
 
   
Else
       
'day rules
       
Dim obj As
Object
 
       
For Each obj
In Me.Controls
            obj.ForeColor = 
Control.DefaultForeColor
            obj.BackColor = 
Control.DefaultBackColor
 
            If
TypeOf obj Is 
TextBox Then
                obj.BackColor 
= Color.White
            End
If
 
            If
TypeOf obj Is 
ComboBox Then
                obj.BackColor 
= Color.White
            End
If
 
            If
TypeOf obj Is 
ListBox Then
                obj.BackColor 
= Color.White
            End
If
       
Next
 
       
Me.BackColor = Control.DefaultBackColor
       
Me.ForeColor = Control.DefaultForeColor
 
   
End If
 
End
Sub
With this mechanization, the display is set to day mode 
between 5 AM and 5PM or set to night mode when the time is between 5 PM and 5 
AM.
Summary
This article describes an approach to implementing an 
alternative color scheme that can quickly be converted back to the current 
operating system color settings. The approach demonstrated was described in 
terms of providing a night mode of operation for displays used by mobile users 
in conditions of darkness. The approach will not eliminate the potential for the 
loss of dark adaptation but will reduce the impact of using displays where this 
is an issue.