From 3292c09a5f8ded990b44468763710da38556b72e Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Tue, 8 Apr 2025 08:32:28 +0200 Subject: [PATCH] ensure the flyout is closed before opening a new one --- Pilz.UI.Telerik/Dialogs/RadFlyoutBase.Statics.cs | 13 +++++++++++-- Pilz.UI.Telerik/Dialogs/RadFlyoutBase.cs | 14 +++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/Pilz.UI.Telerik/Dialogs/RadFlyoutBase.Statics.cs b/Pilz.UI.Telerik/Dialogs/RadFlyoutBase.Statics.cs index 9d3618a..0ccbb00 100644 --- a/Pilz.UI.Telerik/Dialogs/RadFlyoutBase.Statics.cs +++ b/Pilz.UI.Telerik/Dialogs/RadFlyoutBase.Statics.cs @@ -101,14 +101,23 @@ partial class RadFlyoutBase titleToAssing = title; iconToAssign = icon; ParentContext = controlToAssociate; + CloseFlyout(false); // Ensure it's closed! RadFlyoutManager.Show(controlToAssociate, flyoutContentType); } protected static void CloseFlyout() { - if (ParentContext == null) + CloseFlyout(true); + } + + protected static void CloseFlyout(bool throwOnError) + { + if (throwOnError && ParentContext is null) throw new NullReferenceException(nameof(ParentContext)); - ParentContext.BeginInvoke(RadFlyoutManager.Close); + if (ParentContext is null) + RadFlyoutManager.Close(); + else + ParentContext.BeginInvoke(RadFlyoutManager.Close); } } diff --git a/Pilz.UI.Telerik/Dialogs/RadFlyoutBase.cs b/Pilz.UI.Telerik/Dialogs/RadFlyoutBase.cs index 64342d1..7a9c721 100644 --- a/Pilz.UI.Telerik/Dialogs/RadFlyoutBase.cs +++ b/Pilz.UI.Telerik/Dialogs/RadFlyoutBase.cs @@ -1,5 +1,4 @@ using System.ComponentModel; -using System.Diagnostics.CodeAnalysis; using Telerik.WinControls; using Telerik.WinControls.UI; @@ -27,6 +26,8 @@ public partial class RadFlyoutBase : UserControl [DefaultValue(true)] public bool RegisterDialogCancel { get; set; } = true; + public new Size PreferredSize { get; set; } = Size.Empty; + [DefaultValue(true)] public virtual bool ActionPanelVisible { @@ -224,9 +225,20 @@ public partial class RadFlyoutBase : UserControl frm.AutoSize = true; frm.AutoSizeMode = AutoSizeMode.GrowAndShrink; } + + frm.Shown += Form_Shown; } } + private void Form_Shown(object? sender, EventArgs e) + { + if (FindForm() is not Form frm) + return; + + if (!AutoSize) + frm.ClientSize = PreferredSize; + } + protected void Close(DialogResult result) { Result = result;