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; } }