public ScreenInformation(RegistryKey rootKey, int screenNumber, MultiScreenMode multiScreenMode) { RootKey = rootKey; Bounds = multiScreenMode switch { MultiScreenMode.Span => FindEnclosingRectangle(), MultiScreenMode.Mirror or MultiScreenMode.Separate => Screen.AllScreens[screenNumber].Bounds, _ => throw new IndexOutOfRangeException("Unrecognized MultiScreenMode value.") }; }
/// <summary> /// Method called when the form is loaded, so the UI gets updated with the registry data. /// </summary> private void PreferencesForm_Load(object sender, EventArgs e) { _checkBoxCloseOnMouseMovement.Checked = Preferences.CloseOnMouseMovement; MultiScreenMode multiScreenMode = Preferences.MultiScreen; // The Checked event will determine what to show in the tabs _radioButtonMirrorScreens.Checked = multiScreenMode == MultiScreenMode.Mirror; _radioButtonSeparateScreens.Checked = multiScreenMode == MultiScreenMode.Separate; _radioButtonSpanScreens.Checked = multiScreenMode == MultiScreenMode.Span; //_flowLayoutPanelMultiScreenMode.Enabled = Screen.AllScreens.Length > 1; }
private void RadioButtonMultiScreenMode_Checked(object sender, EventArgs e) { if (sender is not RadioButton radioButton || !radioButton.Checked) { return; } MultiScreenMode multiScreenMode = radioButton.Name switch { nameof(_radioButtonMirrorScreens) => MultiScreenMode.Mirror, nameof(_radioButtonSeparateScreens) => MultiScreenMode.Separate, nameof(_radioButtonSpanScreens) => MultiScreenMode.Span, _ => throw new IndexOutOfRangeException("Unexpected radio button."), }; // Save it to the registry Preferences.MultiScreen = multiScreenMode; int totalTabs = multiScreenMode switch { MultiScreenMode.Mirror or MultiScreenMode.Span => 1, MultiScreenMode.Separate => Screen.AllScreens.Length, _ => throw new IndexOutOfRangeException("Unrecognized MultiScreenMode value.") }; string tabTextSuffix = multiScreenMode switch { MultiScreenMode.Mirror => " (Mirror)", MultiScreenMode.Span => " (Composite)", MultiScreenMode.Separate => "", _ => throw new IndexOutOfRangeException("Unrecognized MultiScreenMode value.") }; _tabControlScreens.TabPages.Clear(); for (int tabNumber = 0; tabNumber < totalTabs; tabNumber++) { TabPage tab = new TabPage { Text = $"Display {tabNumber + 1}{tabTextSuffix}" // Matches registry key name }; var currentUserControl = new PrefsByScreenUserControl { AutoSize = true, BackColor = Color.White, Dock = DockStyle.Fill, Name = $"_prefsByScreenUserControl{tabNumber}", TabIndex = 5 }; ScreenInformation currentScreen = Preferences.Screens[tabNumber]; foreach (string url in currentScreen.URLs) { currentUserControl._listViewURLs.Items.Add(url); } currentUserControl._numericUpDownRotationInterval.Value = currentScreen.RotationInterval; currentUserControl._checkBoxShuffle.Checked = currentScreen.Shuffle; tab.Controls.Add(currentUserControl); _tabControlScreens.TabPages.Add(tab); } }