/// <summary>
        /// The handler for when a key is pressed
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void lbMenuItems_KeyDown(object sender, KeyEventArgs e)
        {
            nTimeUntilTimeOut        = 60;
            lblTimeoutCountdown.Text = "";
            if (e.KeyCode == Keys.Escape)
            {
                this.Close();
            }
            else if (e.KeyCode == Keys.Enter)
            {
                if (currentMenuType == MenuType.MainMenu)
                {
                    switch (lbMenuItems.SelectedIndex)
                    {
                    case 0:
                        // Toggle printer status
                        tEngine.TogglePrinterStatus();
                        this.Close();
                        break;

                    case 1:
                        //Reprint a receipt
                        fltReprintReceipt = new frmLookupTransactions(new Size(this.Width, this.Height - 56), ref tEngine, new Point(this.Left, this.Top + 56), "REPRINT_RECEIPT");
                        fltReprintReceipt.Show();
                        fltReprintReceipt.FormClosing += new FormClosingEventHandler(fltReprintReceipt_FormClosing);
                        bOtherFormOpen = true;
                        break;

                    case 2:
                        // Cash paid out
                        fiCashPaidOut = new frmInput(frmInput.FormType.CashPaidOut, new Point(this.Left, this.Height + this.Top - 150), new Size(this.Width, 150), new string[0]);
                        fiCashPaidOut.Show();
                        fiCashPaidOut.FormClosing += new FormClosingEventHandler(fiCashPaidOut_FormClosing);
                        bOtherFormOpen             = true;
                        break;

                    case 3:
                        // Void Transaction
                        fltTransToVoid = new frmLookupTransactions(new Size(this.Width, this.Height - 56), ref tEngine, new Point(this.Left, this.Top + 56), "VOID_TRANSACTION");
                        fltTransToVoid.Show();
                        fltTransToVoid.FormClosing += new FormClosingEventHandler(fltTransToVoid_FormClosing);
                        bOtherFormOpen              = true;
                        break;

                    case 4:
                        // Look up transactions
                        fltTransactions = new frmLookupTransactions(new Size(this.Width, this.Height - 56), ref tEngine, new Point(this.Left, this.Top + 56), null);
                        fltTransactions.Show();
                        bOtherFormOpen = true;
                        fltTransactions.FormClosing += new FormClosingEventHandler(fltTransactions_FormClosing);
                        break;

                    case 5:
                        // Money In Till
                        fmitMoneyInTill = new frmMoneyInTill(ref tEngine, new Point(this.Left, this.Top + 56), new Size(this.Width, this.Height - 56));
                        fmitMoneyInTill.Show();
                        bOtherFormOpen = true;
                        fmitMoneyInTill.FormClosing += new FormClosingEventHandler(fmitMoneyInTill_FormClosing);
                        break;

                    case 6:
                        // Refund
                        frRefund = new frmRefund(new Size(this.Width, this.Height - 56), new Point(this.Left, this.Top + 56), ref tEngine);
                        frRefund.Show();
                        bOtherFormOpen        = true;
                        frRefund.FormClosing += new FormClosingEventHandler(frRefund_FormClosing);
                        break;

                    case 7:
                        // Define Preset Keys
                        fpkPresets = new frmPresetKeys(new Point(this.Left, this.Top + 56), new Size(this.Width, this.Height - 56), ref tEngine);
                        fpkPresets.Show();
                        fpkPresets.FormClosing += new FormClosingEventHandler(fpkPresets_FormClosing);
                        bOtherFormOpen          = true;
                        break;

                    case 8:
                        // Print a register report
                        tEngine.PrintRegisterReport();
                        break;

                    case 9:
                        // Receive On Account
                        froaReceiveMoney              = new frmReceiveOnAccount(new Point(this.Left, this.Top + this.Height - 150), new Size(this.Width, 150), ref tEngine);
                        bOtherFormOpen                = true;
                        froaReceiveMoney.FormClosing += new FormClosingEventHandler(froaReceiveMoney_FormClosing);
                        break;

                    case 10:
                        Application.ExitThread();
                        //Application.Exit();
                        break;
                    }
                }
                else if (currentMenuType == MenuType.AdminMenu)
                {
                    switch (lbMenuItems.SelectedIndex)
                    {
                    case 0:
                        // Remove a transaction
                        fltTransToRemove = new frmLookupTransactions(new Size(this.Width, this.Height - 56), ref tEngine, new Point(this.Left, this.Top + 56), "REMOVE_TRANSACTION");
                        try
                        {
                            fltTransToRemove.Show();
                            fltTransToRemove.FormClosing += new FormClosingEventHandler(fltTransToRemove_FormClosing);
                            bOtherFormOpen = true;
                        }
                        catch
                        {
                            // User backed out of removal
                            ;
                        }
                        break;

                    case 1:
                        if (File.Exists("REPDATA_PREV.DBF") && File.Exists("TDATA_PREV.DBF") && File.Exists("THDR_PREV.DBF") && UserCertain("undo the previous transaction?"))
                        {
                            File.Delete(GTill.Properties.Settings.Default.sRepDataLoc);
                            File.Delete(GTill.Properties.Settings.Default.sTDataLoc);
                            File.Delete(GTill.Properties.Settings.Default.sTHdrLoc);
                            File.Copy("REPDATA_PREV.DBF", GTill.Properties.Settings.Default.sRepDataLoc);
                            File.Copy("TDATA_PREV.DBF", GTill.Properties.Settings.Default.sTDataLoc);
                            File.Copy("THDR_PREV.DBF", GTill.Properties.Settings.Default.sTHdrLoc);
                            tEngine.LoadTable("REPDATA");
                            tEngine.LoadTable("TDATA");
                            tEngine.LoadTable("THDR");
                            this.Close();
                        }
                        break;

                    case 2:
                        // Print receipt header
                        tEngine.PrintReceiptHeader();
                        break;

                    case 3:
                        // Print receipt footer
                        string sDateTime          = DateTime.Now.Day + "/" + DateTime.Now.Month.ToString() + "/" + DateTime.Now.Year.ToString() + ", " + DateTime.Now.TimeOfDay.Hours.ToString() + ":" + DateTime.Now.TimeOfDay.Minutes.ToString();
                        string sStaffName         = tEngine.GetCurrentStaffName();
                        string sTransactionNumber = tEngine.GetNextTransactionNumber().ToString();
                        tEngine.PrintReceiptFooter(sStaffName, sDateTime, sTransactionNumber);
                        break;

                    case 4:
                        // Process file in INGNG folder
                        tEngine.ProcessFilesInINGNG();
                        break;

                    case 5:
                        // About GTill
                        frmAbout fAbt = new frmAbout();
                        fAbt.ShowDialog();
                        break;
                    }
                }
            }
        }