diff --git a/SunnyUI/Controls/Color/UIColorWheel.cs b/SunnyUI/Controls/Color/UIColorWheel.cs
index 266b484e..52be5562 100644
--- a/SunnyUI/Controls/Color/UIColorWheel.cs
+++ b/SunnyUI/Controls/Color/UIColorWheel.cs
@@ -43,7 +43,7 @@ namespace Sunny.UI
///
/// 控件缩放前在其容器里的位置
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Controls/Color/UILabelRotate.cs b/SunnyUI/Controls/Color/UILabelRotate.cs
index ee1eb8ae..0e18325a 100644
--- a/SunnyUI/Controls/Color/UILabelRotate.cs
+++ b/SunnyUI/Controls/Color/UILabelRotate.cs
@@ -21,7 +21,7 @@ namespace Sunny.UI
///
/// 控件缩放前在其容器里的位置
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Controls/UIContextMenuStrip.cs b/SunnyUI/Controls/UIContextMenuStrip.cs
index bcbe07d0..7b703f25 100644
--- a/SunnyUI/Controls/UIContextMenuStrip.cs
+++ b/SunnyUI/Controls/UIContextMenuStrip.cs
@@ -51,7 +51,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Controls/UIControl.cs b/SunnyUI/Controls/UIControl.cs
index 97142e7f..d9e03d16 100644
--- a/SunnyUI/Controls/UIControl.cs
+++ b/SunnyUI/Controls/UIControl.cs
@@ -63,7 +63,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Controls/UIDataGridView.cs b/SunnyUI/Controls/UIDataGridView.cs
index 4b38ba45..3cdb1da1 100644
--- a/SunnyUI/Controls/UIDataGridView.cs
+++ b/SunnyUI/Controls/UIDataGridView.cs
@@ -151,7 +151,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Controls/UIImageButton.cs b/SunnyUI/Controls/UIImageButton.cs
index 705a086c..51b125f2 100644
--- a/SunnyUI/Controls/UIImageButton.cs
+++ b/SunnyUI/Controls/UIImageButton.cs
@@ -53,7 +53,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Controls/UIKnobControl.cs b/SunnyUI/Controls/UIKnobControl.cs
index 1fe2159f..314ae016 100644
--- a/SunnyUI/Controls/UIKnobControl.cs
+++ b/SunnyUI/Controls/UIKnobControl.cs
@@ -1394,7 +1394,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Controls/UILabel.cs b/SunnyUI/Controls/UILabel.cs
index e837cb4d..19f4d74b 100644
--- a/SunnyUI/Controls/UILabel.cs
+++ b/SunnyUI/Controls/UILabel.cs
@@ -51,7 +51,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
@@ -201,7 +201,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Controls/UILedBulb.cs b/SunnyUI/Controls/UILedBulb.cs
index b76ccec2..c37173bf 100644
--- a/SunnyUI/Controls/UILedBulb.cs
+++ b/SunnyUI/Controls/UILedBulb.cs
@@ -53,7 +53,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Controls/UINavBar.cs b/SunnyUI/Controls/UINavBar.cs
index e7fd669e..6e106078 100644
--- a/SunnyUI/Controls/UINavBar.cs
+++ b/SunnyUI/Controls/UINavBar.cs
@@ -75,7 +75,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Controls/UINavMenu.cs b/SunnyUI/Controls/UINavMenu.cs
index a191ce6b..8ded24ae 100644
--- a/SunnyUI/Controls/UINavMenu.cs
+++ b/SunnyUI/Controls/UINavMenu.cs
@@ -130,7 +130,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Controls/UINavMenuHelper.cs b/SunnyUI/Controls/UINavMenuHelper.cs
index 64c1d792..7527da86 100644
--- a/SunnyUI/Controls/UINavMenuHelper.cs
+++ b/SunnyUI/Controls/UINavMenuHelper.cs
@@ -358,6 +358,13 @@ namespace Sunny.UI
return false;
}
+ List pages = tabControl.SelectedTab.GetControls();
+ if (pages.Count == 1)
+ {
+ bool isCancel = pages[0].OnPageDeselecting();
+ if (isCancel) return false;
+ }
+
foreach (var item in PageItems)
{
if (item.Value.PageIndex == pageIndex && item.Key != null)
@@ -380,6 +387,13 @@ namespace Sunny.UI
return false;
}
+ List pages = tabControl.SelectedTab.GetControls();
+ if (pages.Count == 1)
+ {
+ bool isCancel = pages[0].OnPageDeselecting();
+ if (isCancel) return false;
+ }
+
foreach (var item in PageItems)
{
if (item.Value.PageGuid == guid && item.Key != null)
diff --git a/SunnyUI/Controls/UISmoothLabel.cs b/SunnyUI/Controls/UISmoothLabel.cs
index 1f76dfc2..87234e4d 100644
--- a/SunnyUI/Controls/UISmoothLabel.cs
+++ b/SunnyUI/Controls/UISmoothLabel.cs
@@ -57,7 +57,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Controls/UISplitContainer.cs b/SunnyUI/Controls/UISplitContainer.cs
index dec103c8..c91280f8 100644
--- a/SunnyUI/Controls/UISplitContainer.cs
+++ b/SunnyUI/Controls/UISplitContainer.cs
@@ -91,7 +91,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Controls/UITabControl.cs b/SunnyUI/Controls/UITabControl.cs
index 6e7389c8..07866f9d 100644
--- a/SunnyUI/Controls/UITabControl.cs
+++ b/SunnyUI/Controls/UITabControl.cs
@@ -77,7 +77,7 @@ namespace Sunny.UI
_fillColor = UIStyles.Blue.TabControlBackColor;
}
- [Browsable(false)]
+ [Browsable(false), DefaultValue(null)]
public IFrame Frame
{
get; set;
@@ -92,7 +92,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Controls/UITabControlMenu.cs b/SunnyUI/Controls/UITabControlMenu.cs
index d3efc495..17eddd28 100644
--- a/SunnyUI/Controls/UITabControlMenu.cs
+++ b/SunnyUI/Controls/UITabControlMenu.cs
@@ -71,7 +71,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Controls/UIUserControl.cs b/SunnyUI/Controls/UIUserControl.cs
index 771c5823..362cb46c 100644
--- a/SunnyUI/Controls/UIUserControl.cs
+++ b/SunnyUI/Controls/UIUserControl.cs
@@ -62,7 +62,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Controls/UIValve.cs b/SunnyUI/Controls/UIValve.cs
index 58d3359c..7bb919a2 100644
--- a/SunnyUI/Controls/UIValve.cs
+++ b/SunnyUI/Controls/UIValve.cs
@@ -53,7 +53,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Forms/UIForm.cs b/SunnyUI/Forms/UIForm.cs
index f9742567..8b627876 100644
--- a/SunnyUI/Forms/UIForm.cs
+++ b/SunnyUI/Forms/UIForm.cs
@@ -173,7 +173,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///
diff --git a/SunnyUI/Forms/UIFormHelper.cs b/SunnyUI/Forms/UIFormHelper.cs
index 17d19b91..afaa8c39 100644
--- a/SunnyUI/Forms/UIFormHelper.cs
+++ b/SunnyUI/Forms/UIFormHelper.cs
@@ -26,6 +26,7 @@
using System;
using System.Collections;
+using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
@@ -50,6 +51,20 @@ namespace Sunny.UI
}
}
+ public class PageDeselectingEventArgs : CancelEventArgs
+ {
+ private string _cancelReason;
+
+ public PageDeselectingEventArgs(bool cancel, string cancelReason) : base(cancel)
+ {
+ _cancelReason = cancelReason;
+ }
+
+ public string CancelReason => _cancelReason;
+ }
+
+ public delegate void PageDeselectingEventHandler(object sender, PageDeselectingEventArgs e);
+
public delegate void OnUIPageChanged(object sender, UIPageEventArgs e);
public static class UIMessageDialog
diff --git a/SunnyUI/Frames/UIPage.cs b/SunnyUI/Frames/UIPage.cs
index 33079943..1bc3fff7 100644
--- a/SunnyUI/Frames/UIPage.cs
+++ b/SunnyUI/Frames/UIPage.cs
@@ -33,6 +33,7 @@
* 2022-08-25: V3.2.3 閲嶆瀯澶氶〉闈㈡鏋朵紶鍊硷細椤甸潰鍙戦佺粰妗嗘灦 SendParamToPage 鍑芥暟
* 2022-08-25: V3.2.3 閲嶆瀯澶氶〉闈㈡鏋朵紶鍊硷細鎺ユ敹妗嗘灦銆侀〉闈紶鍊 ReceiveParams 浜嬩欢
* 2022-10-28: V3.2.6 鏍囬鏍忓鍔犳墿灞曟寜閽
+ * 2023-02-24: V3.3.2 澧炲姞PageDeselecting锛屽彇娑堥〉闈㈤夋嫨鏃跺鍔犲垽鏂
******************************************************************************/
using System;
@@ -107,6 +108,15 @@ namespace Sunny.UI
base.SizeGripStyle = SizeGripStyle.Hide;
}
+ public event PageDeselectingEventHandler PageDeselecting;
+
+ internal bool OnPageDeselecting()
+ {
+ PageDeselectingEventArgs e = new PageDeselectingEventArgs(false, string.Empty);
+ PageDeselecting?.Invoke(this, e);
+ return e.Cancel;
+ }
+
[Browsable(false)]
public new IButtonControl AcceptButton
{
@@ -235,7 +245,7 @@ namespace Sunny.UI
///
/// 鎺т欢缂╂斁鍓嶅湪鍏跺鍣ㄩ噷鐨勪綅缃
///
- [Browsable(false)]
+ [Browsable(false), DefaultValue(typeof(Rectangle), "0, 0, 0, 0")]
public Rectangle ZoomScaleRect { get; set; }
///