diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs
index 0dca14d..a84fac0 100644
--- a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs
+++ b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs
@@ -999,6 +999,59 @@ namespace JoyD.Windows.CS
return adjustedBrushSize;
}
+ ///
+ /// 控制分隔条显示状态的通用方法
+ /// 从第一个按钮开始遍历,当分隔条前或后没有可见按钮时将其设为隐藏
+ ///
+ private void UpdateSeparatorsVisibility()
+ {
+ try
+ {
+ // 遍历所有工具条项
+ for (int i = 0; i < toolStrip.Items.Count; i++)
+ {
+ // 找到分隔条
+ if (toolStrip.Items[i] is ToolStripSeparator separator)
+ {
+ bool hasVisibleItemBefore = false;
+ bool hasVisibleItemAfter = false;
+
+ // 向前查找可见的项目
+ for (int j = i - 1; j >= 0; j--)
+ {
+ if ((toolStrip.Items[j] is ToolStripButton btn && btn.Visible) ||
+ (toolStrip.Items[j] is ToolStripTextBox tb && tb.Visible) ||
+ (toolStrip.Items[j] is ToolStripComboBox cb && cb.Visible))
+ {
+ hasVisibleItemBefore = true;
+ break;
+ }
+ }
+
+ // 向后查找可见的项目
+ for (int j = i + 1; j < toolStrip.Items.Count; j++)
+ {
+ if ((toolStrip.Items[j] is ToolStripButton btn && btn.Visible) ||
+ (toolStrip.Items[j] is ToolStripTextBox tb && tb.Visible) ||
+ (toolStrip.Items[j] is ToolStripComboBox cb && cb.Visible))
+ {
+ hasVisibleItemAfter = true;
+ break;
+ }
+ }
+
+ // 当分隔条前或后没有可见按钮时,将其设为隐藏
+ // 只有当前后都有可见按钮时,分隔条才显示
+ separator.Visible = hasVisibleItemBefore && hasVisibleItemAfter;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine("更新分隔条可见性失败: " + ex.Message);
+ }
+ }
+
///
/// 根据状态设置按钮可见性
///
@@ -1007,30 +1060,7 @@ namespace JoyD.Windows.CS
{
try
{
- // 获取工具栏分隔条引用
- ToolStripSeparator firstSeparator = null; // 删除温差图例按钮和画笔大小按钮之间的分隔条
- ToolStripSeparator secondSeparator = null; // 画笔大小按钮和新按钮组之间的分隔条
- ToolStripSeparator thirdSeparator = null; // txtRegionNumber后面的分隔条
-
- // 查找分隔条
- for (int i = 0; i < toolStrip.Items.Count - 1; i++)
- {
- // 查找第一个分隔条(在删除温差图例按钮和画笔大小按钮之间)
- if (toolStrip.Items[i] == btnDeleteTempDiff && toolStrip.Items[i + 1] is ToolStripSeparator)
- {
- firstSeparator = toolStrip.Items[i + 1] as ToolStripSeparator;
- }
- // 查找第二个分隔条(在画笔大小按钮和新按钮组之间)
- else if (toolStrip.Items[i] == btnBrushSize25 && toolStrip.Items[i + 1] is ToolStripSeparator)
- {
- secondSeparator = toolStrip.Items[i + 1] as ToolStripSeparator;
- }
- // 查找第三个分隔条(在txtRegionNumber后面)
- else if (toolStrip.Items[i] == txtRegionNumber && toolStrip.Items[i + 1] is ToolStripSeparator)
- {
- thirdSeparator = toolStrip.Items[i + 1] as ToolStripSeparator;
- }
- }
+
// 创建检查是否有画笔按钮可见的辅助方法
Func HasVisibleBrushButtons = () =>
@@ -1071,22 +1101,8 @@ namespace JoyD.Windows.CS
// 隐藏区域编号设置控件
txtRegionNumber.Visible = false;
txtRegionNumber.Text = ""; // 清空文本框
- // 控制分隔条可见性:分隔条只有在前后都有可见按钮时才显示
- if (firstSeparator != null)
- {
- // 第一个分隔条:前面按钮(btnDeleteTempDiff)和后面按钮(所有画笔按钮)都不可见
- firstSeparator.Visible = btnDeleteTempDiff.Visible && HasVisibleBrushButtons();
- }
- if (secondSeparator != null)
- {
- // 第二个分隔条:前面按钮(所有画笔按钮)不可见,后面按钮组有可见按钮
- secondSeparator.Visible = HasVisibleBrushButtons() && HasVisibleNewButtons();
- }
- if (thirdSeparator != null)
- {
- // 在初始状态下,txtRegionNumber是隐藏的,所以分隔条也应该隐藏
- thirdSeparator.Visible = false;
- }
+ // 调用通用方法控制分隔条可见性
+ UpdateSeparatorsVisibility();
break;
case 2: // 绘制状态
@@ -1118,22 +1134,8 @@ namespace JoyD.Windows.CS
btnBrushSize10.Visible = false;
btnBrushSize15.Visible = false;
btnBrushSize25.Visible = false;
- // 控制分隔条可见性:分隔条只有在前后都有可见按钮时才显示
- if (firstSeparator != null)
- {
- // 第一个分隔条:前面按钮(btnDeleteTempDiff)和后面按钮(所有画笔按钮)都不可见
- firstSeparator.Visible = btnDeleteTempDiff.Visible && HasVisibleBrushButtons();
- }
- if (secondSeparator != null)
- {
- // 第二个分隔条:前面按钮(所有画笔按钮)和后面按钮(新按钮组)都不可见
- secondSeparator.Visible = HasVisibleBrushButtons() && HasVisibleNewButtons();
- }
- if (thirdSeparator != null)
- {
- // 在温差图绘制状态下,txtRegionNumber是隐藏的,所以分隔条也应该隐藏
- thirdSeparator.Visible = false;
- }
+ // 调用通用方法控制分隔条可见性
+ UpdateSeparatorsVisibility();
break;
case 1: // 选中区域状态
btnDrawRegion.Visible = false; // 隐藏绘制区域按钮
@@ -1169,22 +1171,8 @@ namespace JoyD.Windows.CS
btnBrushSize10.Visible = false;
btnBrushSize15.Visible = false;
btnBrushSize25.Visible = false;
- // 控制分隔条可见性:分隔条只有在前后都有可见按钮时才显示
- if (firstSeparator != null)
- {
- // 第一个分隔条:前面按钮(btnDeleteTempDiff)和后面按钮(所有画笔按钮)都不可见
- firstSeparator.Visible = btnDeleteTempDiff.Visible && HasVisibleBrushButtons();
- }
- if (secondSeparator != null)
- {
- // 第二个分隔条:前面按钮(所有画笔按钮)和后面按钮(新按钮组)都不可见
- secondSeparator.Visible = HasVisibleBrushButtons() && HasVisibleNewButtons();
- }
- if (thirdSeparator != null)
- {
- // 在选中区域状态下,txtRegionNumber后面的分隔条应该隐藏
- thirdSeparator.Visible = false;
- }
+ // 调用通用方法控制分隔条可见性
+ UpdateSeparatorsVisibility();
break;
case 3: // 温差图绘制状态
@@ -1213,22 +1201,8 @@ namespace JoyD.Windows.CS
btnBrushSize10.Visible = false;
btnBrushSize15.Visible = false;
btnBrushSize25.Visible = false;
- // 控制分隔条可见性:分隔条只有在前后都有可见按钮时才显示
- if (firstSeparator != null)
- {
- // 第一个分隔条:前面按钮(btnDeleteTempDiff)可见,检查后面是否有可见的画笔按钮
- firstSeparator.Visible = btnDeleteTempDiff.Visible && HasVisibleBrushButtons();
- }
- if (secondSeparator != null)
- {
- // 第二个分隔条:前面按钮(所有画笔按钮)和后面按钮(新按钮组)都不可见
- secondSeparator.Visible = HasVisibleBrushButtons() && HasVisibleNewButtons();
- }
- if (thirdSeparator != null)
- {
- // 在绘制状态下,txtRegionNumber后面的分隔条应该隐藏
- thirdSeparator.Visible = false;
- }
+ // 调用通用方法控制分隔条可见性
+ UpdateSeparatorsVisibility();
break;
}
}