优化分隔条显示控制逻辑,添加通用的UpdateSeparatorsVisibility方法,当分隔条前或后没有可见按钮时将其设为隐藏
This commit is contained in:
@@ -999,6 +999,59 @@ namespace JoyD.Windows.CS
|
||||
return adjustedBrushSize;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 控制分隔条显示状态的通用方法
|
||||
/// 从第一个按钮开始遍历,当分隔条前或后没有可见按钮时将其设为隐藏
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据状态设置按钮可见性
|
||||
/// </summary>
|
||||
@@ -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<bool> 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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user