protected virtual void InitializeHandles()
        {
            StartServerButton.Click += (object sender, EventArgs e) =>
            {
                if (Server.ServerState == Servers.ServerState.Stop)
                {
                    Server?.Begin();
                }
                else
                {
                    Server?.Stop();
                }
            };

            TargetPortField.DropDown += (object sender, EventArgs e) =>
            {
                if (sender is DropdownInputField)
                {
                    DropdownInputField dropdown       = sender as DropdownInputField;
                    List <string>      availablePorts = Server.GetAvailablePorts();

                    if (availablePorts == null)
                    {
                        return;
                    }

                    dropdown.Items.Clear();
                    dropdown.Items.AddRange(availablePorts);
                }
            };

            TargetPortField.ItemSelected += (object sender, ItemEventArgs e) =>
            {
                string port = TargetPortField.Text;

                Server.TargetPort = port;
                Properties.Settings.Default.SerialPort_LastPort = port;
                Properties.Settings.Default.Save();
            };

            TargetPortField.Leave += (object sender, EventArgs e) =>
            {
                string port = TargetPortField.Text;

                Server.TargetPort = port;
                Properties.Settings.Default.SerialPort_LastPort = port;
                Properties.Settings.Default.Save();
            };

            SaveServerSettingsButton.Click += (object sender, EventArgs e) =>
            {
                string projectPath = ProjectsUtils.ShowSaveProjectDialog(Server.Settings);

                if (projectPath != null)
                {
                    Properties.Settings.Default.SerialPort_LastProject = projectPath;
                    Properties.Settings.Default.Save();
                }
            };

            LoadServerSettingsButton.Click += (object sender, EventArgs e) =>
            {
                SerialPortProject newProject  = Server.Settings;
                string            projectPath = ProjectsUtils.ShowOpenProjectDialog(ref newProject);

                if (projectPath != null)
                {
                    Properties.Settings.Default.SerialPort_LastProject = projectPath;
                    Properties.Settings.Default.Save();
                }

                if (Server.Settings != newProject)
                {
                    Server.Settings = newProject;
                }
            };

            EditDataButton.Click += (object sender, EventArgs e) =>
            {
                MainForm.ShowControl(CreateLogDataEditor());
            };

            PortSpeedField.ItemSelected += (object sender, ItemEventArgs e) =>
            {
                Server.Settings.PortSpeed = PortSpeedField.ToEnum(Server.Settings.PortSpeed);
                UpdateValues();
            };

            AutoConnectToggle.Click += (object sender, EventArgs e) =>
            {
                Server.Settings.AutoConnect = AutoConnectToggle.Checked;
                UpdateValues();
            };

            AutoConnectRequestField.Leave += (object sender, EventArgs e) =>
            {
                Server.Settings.AutoConnectRequest = AutoConnectRequestField.Text;
                UpdateValues();
            };

            AutoConnectResponseField.Leave += (object sender, EventArgs e) =>
            {
                Server.Settings.AutoConnectResponse = AutoConnectResponseField.Text;
                UpdateValues();
            };

            EventHandler autoConnectResponseTimeoutHandler = (object sender, EventArgs e) =>
            {
                Server.Settings.AutoConnectResponseTimeout = (int)AutoConnectResponseTimeoutField.Value;
                UpdateValues();
            };

            AutoConnectResponseTimeoutField.Leave                += autoConnectResponseTimeoutHandler;
            AutoConnectResponseTimeoutField.AddButton.Click      += autoConnectResponseTimeoutHandler;
            AutoConnectResponseTimeoutField.SubtractButton.Click += autoConnectResponseTimeoutHandler;

            EventHandler connectionIntervalHandler = (object sender, EventArgs e) =>
            {
                Server.Settings.ConnectionInterval = (int)ConnectionIntervalField.Value;
                UpdateValues();
            };

            ConnectionIntervalField.Leave                += connectionIntervalHandler;
            ConnectionIntervalField.AddButton.Click      += connectionIntervalHandler;
            ConnectionIntervalField.SubtractButton.Click += connectionIntervalHandler;

            SendModeField.ItemSelected += (object sender, ItemEventArgs e) =>
            {
                Server.Settings.SendMode = SendModeField.ToEnum(Server.Settings.SendMode);
                UpdateValues();
            };

            EventHandler connectionCheckHandler = (object sender, EventArgs e) =>
            {
                Server.Settings.ConnectionCheckInterval = (int)ConnectionCheckField.Value;
                UpdateValues();
            };

            ConnectionCheckField.Leave                += connectionCheckHandler;
            ConnectionCheckField.AddButton.Click      += connectionCheckHandler;
            ConnectionCheckField.SubtractButton.Click += connectionCheckHandler;

            EventHandler messageIntervalHandler = (object sender, EventArgs e) =>
            {
                Server.Settings.MessageInterval = (int)MessageIntervalField.Value;
                UpdateValues();
            };

            MessageIntervalField.Leave                += messageIntervalHandler;
            MessageIntervalField.AddButton.Click      += messageIntervalHandler;
            MessageIntervalField.SubtractButton.Click += messageIntervalHandler;

            DataRequestField.Leave += (object sender, EventArgs e) =>
            {
                Server.Settings.DataRequest = DataRequestField.Text;
                UpdateValues();
            };

            Properties.Settings.Default.PropertyChanged += (object sender, PropertyChangedEventArgs e) =>
            {
                switch (e.PropertyName)
                {
                case "SerialPort_PortsWhitelist":
                    Server.PortWhitelist.Clear();
                    Server.PortWhitelist.AddRange(SlicePortList(Properties.Settings.Default.SerialPort_PortWhitelist));
                    break;

                case "SerialPort_PortsBlacklist":
                    Server.PortBlacklist.Clear();
                    Server.PortBlacklist.AddRange(SlicePortList(Properties.Settings.Default.SerialPort_PortBlacklist));
                    break;
                }
            };
        }
        protected virtual void InitializeHandles()
        {
            StartServerButton.Click += (object sender, EventArgs e) =>
            {
                if (Server.ServerState == Servers.ServerState.Stop)
                {
                    Server?.Begin();
                }
                else
                {
                    Server?.Stop();
                }
            };

            StartLogButton.Click += (object sender, EventArgs e) =>
            {
                if (Server.LogState == Servers.ServerState.Stop)
                {
                    Server?.BeginLog();
                }
                else
                {
                    Server?.StopLog();
                }
            };

            SaveServerSettingsButton.Click += (object sender, EventArgs e) =>
            {
                string projectPath = ProjectsUtils.ShowSaveProjectDialog(Server.Settings);

                if (projectPath != null)
                {
                    Properties.Settings.Default.Logger_LastProject = projectPath;
                    Properties.Settings.Default.Save();
                }
            };

            LoadServerSettingsButton.Click += (object sender, EventArgs e) =>
            {
                LoggerProject newProject  = Server.Settings;
                string        projectPath = ProjectsUtils.ShowOpenProjectDialog(ref newProject);

                if (projectPath != null)
                {
                    Properties.Settings.Default.Logger_LastProject = projectPath;
                    Properties.Settings.Default.Save();
                }

                if (Server.Settings != newProject)
                {
                    Server.Settings = newProject;
                }
            };


            LogNameField.Leave += (object sender, EventArgs e) =>
            {
                string newFileName = FileUtils.CreateCorrectFileName(LogNameField.Text);

                newFileName = string.IsNullOrWhiteSpace(newFileName) ? "NamelessLog" : newFileName;
                Properties.Settings.Default.Logger_LogName = newFileName;
                Properties.Settings.Default.Save();

                UpdateValues();
            };

            EditDataButton.Click += (object sender, EventArgs e) =>
            {
                MainForm.ShowControl(CreateLogDataEditor());
            };

            LogFileFormatField.Leave += (object sender, EventArgs e) =>
            {
                string newFileFormat = FileUtils.CreateCorrectFileName(LogFileFormatField.Text);

                newFileFormat = string.IsNullOrWhiteSpace(newFileFormat) ? "txt" : newFileFormat;
                Server.Settings.LogFileFormat = newFileFormat;

                UpdateValues();
            };

            FrametimeModeToggle.Click += (object sender, EventArgs e) =>
            {
                Server.Settings.UseFrametimeMode = FrametimeModeToggle.Checked;
                UpdateValues();
            };

            EventHandler updateIntervalFieldHandler = (object sender, EventArgs e) =>
            {
                Server.Settings.DataUpdateInterval = (int)UpdateIntervalField.Value;
                UpdateValues();
            };

            UpdateIntervalField.Leave                += updateIntervalFieldHandler;
            UpdateIntervalField.AddButton.Click      += updateIntervalFieldHandler;
            UpdateIntervalField.SubtractButton.Click += updateIntervalFieldHandler;

            Properties.Settings.Default.PropertyChanged += (object sender, PropertyChangedEventArgs e) =>
            {
                switch (e.PropertyName)
                {
                case "Logger_LogHotkey":
                    StartLogHotkey.Key       = Properties.Settings.Default.Logger_LogHotkey & ~Keys.Modifiers;
                    StartLogHotkey.Modifiers = Properties.Settings.Default.Logger_LogHotkey & Keys.Modifiers;
                    break;
                }
            };

            StartLogHotkey.HotkeyPressed += (object sender, EventArgs e) =>
            {
                if (Server.Settings.UseFrametimeMode == true && Server.ServerState == Servers.ServerState.Connected ||
                    Server.Settings.UseFrametimeMode == false && Server.ServerState == Servers.ServerState.Begin)
                {
                    if (Server.LogState == Servers.ServerState.Begin)
                    {
                        Server.StopLog();
                    }
                    else
                    {
                        Server.LogDirectory = Properties.Settings.Default.Logger_LogPath;
                        Server.LogName      = Properties.Settings.Default.Logger_LogName;
                        Server.BeginLog();
                    }
                }
            };
        }