diff --git a/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.Designer.cs b/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.Designer.cs index b6b6e6489..8cc71c646 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.Designer.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.Designer.cs @@ -257,8 +257,8 @@ namespace mRemoteNG.UI.Forms.OptionsPages // tableLayoutPanel2 // tableLayoutPanel2.ColumnCount = 2; - tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 45F)); - tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 55F)); + tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.AutoSize)); + tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); tableLayoutPanel2.Controls.Add(numRdpReconnectionCount, 1, 0); tableLayoutPanel2.Controls.Add(numAutoSave, 1, 2); tableLayoutPanel2.Controls.Add(lblRdpReconnectionCount, 0, 0); diff --git a/mRemoteNG/UI/Forms/frmOptions.cs b/mRemoteNG/UI/Forms/frmOptions.cs index 37b141061..efd07a6ad 100644 --- a/mRemoteNG/UI/Forms/frmOptions.cs +++ b/mRemoteNG/UI/Forms/frmOptions.cs @@ -22,6 +22,7 @@ namespace mRemoteNG.UI.Forms private string _pageName; private readonly DisplayProperties _display = new(); private readonly List _optionPageObjectNames; + private bool _isInitialized = false; public FrmOptions() : this(Language.StartupExit) { @@ -57,6 +58,13 @@ namespace mRemoteNG.UI.Forms private void FrmOptions_Load(object sender, EventArgs e) { + // Only initialize once to prevent multiple event subscriptions and page reloading + if (_isInitialized) + { + this.Visible = true; + return; + } + this.Visible = true; FontOverrider.FontOverride(this); SetActivatedPage(); @@ -293,6 +301,9 @@ namespace mRemoteNG.UI.Forms private void FrmOptions_FormClosing(object sender, FormClosingEventArgs e) { + // Ensure Application.Idle handler is removed if still attached + Application.Idle -= Application_Idle; + e.Cancel = true; this.Visible = false; } diff --git a/mRemoteNG/UI/Window/OptionsWindow.cs b/mRemoteNG/UI/Window/OptionsWindow.cs index 6b07a7543..3f3931bbc 100644 --- a/mRemoteNG/UI/Window/OptionsWindow.cs +++ b/mRemoteNG/UI/Window/OptionsWindow.cs @@ -12,6 +12,7 @@ namespace mRemoteNG.UI.Window public partial class OptionsWindow : BaseWindow { private FrmOptions _optionsForm; + private bool _isInitialized = false; #region Public Methods @@ -34,8 +35,14 @@ namespace mRemoteNG.UI.Window private void Options_Load(object sender, EventArgs e) { + // Only subscribe to ThemeChanged once to prevent multiple subscriptions + if (!_isInitialized) + { + ThemeManager.getInstance().ThemeChanged += ApplyTheme; + _isInitialized = true; + } + ApplyTheme(); - ThemeManager.getInstance().ThemeChanged += ApplyTheme; ApplyLanguage(); LoadOptionsForm(); } diff --git a/mRemoteNGTests/UI/Forms/OptionsFormTests.cs b/mRemoteNGTests/UI/Forms/OptionsFormTests.cs index 2b964cb4b..947e7c5ef 100644 --- a/mRemoteNGTests/UI/Forms/OptionsFormTests.cs +++ b/mRemoteNGTests/UI/Forms/OptionsFormTests.cs @@ -33,5 +33,32 @@ namespace mRemoteNGTests.UI.Forms ListViewTester listViewTester = new("lstOptionPages", _optionsForm); Assert.That(listViewTester.Items.Count, Is.EqualTo(12)); } + + [Test] + public void FormCanBeHiddenAndShownMultipleTimes() + { + // First show (already done in Setup) + Assert.That(_optionsForm.Visible, Is.True); + + // Hide the form + _optionsForm.Hide(); + Assert.That(_optionsForm.Visible, Is.False); + + // Show it again + _optionsForm.Show(); + Assert.That(_optionsForm.Visible, Is.True); + + // Verify pages are still loaded correctly + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); + Assert.That(listViewTester.Items.Count, Is.EqualTo(12)); + + // Hide and show one more time + _optionsForm.Hide(); + _optionsForm.Show(); + Assert.That(_optionsForm.Visible, Is.True); + + // Verify pages are still there + Assert.That(listViewTester.Items.Count, Is.EqualTo(12)); + } } } \ No newline at end of file