优化分隔条显示控制逻辑,添加通用的UpdateSeparatorsVisibility方法,当分隔条前或后没有可见按钮时将其设为隐藏
This commit is contained in:
@@ -999,6 +999,59 @@ namespace JoyD.Windows.CS
|
|||||||
return adjustedBrushSize;
|
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>
|
||||||
/// 根据状态设置按钮可见性
|
/// 根据状态设置按钮可见性
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -1007,30 +1060,7 @@ namespace JoyD.Windows.CS
|
|||||||
{
|
{
|
||||||
try
|
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 = () =>
|
Func<bool> HasVisibleBrushButtons = () =>
|
||||||
@@ -1071,22 +1101,8 @@ namespace JoyD.Windows.CS
|
|||||||
// 隐藏区域编号设置控件
|
// 隐藏区域编号设置控件
|
||||||
txtRegionNumber.Visible = false;
|
txtRegionNumber.Visible = false;
|
||||||
txtRegionNumber.Text = ""; // 清空文本框
|
txtRegionNumber.Text = ""; // 清空文本框
|
||||||
// 控制分隔条可见性:分隔条只有在前后都有可见按钮时才显示
|
// 调用通用方法控制分隔条可见性
|
||||||
if (firstSeparator != null)
|
UpdateSeparatorsVisibility();
|
||||||
{
|
|
||||||
// 第一个分隔条:前面按钮(btnDeleteTempDiff)和后面按钮(所有画笔按钮)都不可见
|
|
||||||
firstSeparator.Visible = btnDeleteTempDiff.Visible && HasVisibleBrushButtons();
|
|
||||||
}
|
|
||||||
if (secondSeparator != null)
|
|
||||||
{
|
|
||||||
// 第二个分隔条:前面按钮(所有画笔按钮)不可见,后面按钮组有可见按钮
|
|
||||||
secondSeparator.Visible = HasVisibleBrushButtons() && HasVisibleNewButtons();
|
|
||||||
}
|
|
||||||
if (thirdSeparator != null)
|
|
||||||
{
|
|
||||||
// 在初始状态下,txtRegionNumber是隐藏的,所以分隔条也应该隐藏
|
|
||||||
thirdSeparator.Visible = false;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: // 绘制状态
|
case 2: // 绘制状态
|
||||||
@@ -1118,22 +1134,8 @@ namespace JoyD.Windows.CS
|
|||||||
btnBrushSize10.Visible = false;
|
btnBrushSize10.Visible = false;
|
||||||
btnBrushSize15.Visible = false;
|
btnBrushSize15.Visible = false;
|
||||||
btnBrushSize25.Visible = false;
|
btnBrushSize25.Visible = false;
|
||||||
// 控制分隔条可见性:分隔条只有在前后都有可见按钮时才显示
|
// 调用通用方法控制分隔条可见性
|
||||||
if (firstSeparator != null)
|
UpdateSeparatorsVisibility();
|
||||||
{
|
|
||||||
// 第一个分隔条:前面按钮(btnDeleteTempDiff)和后面按钮(所有画笔按钮)都不可见
|
|
||||||
firstSeparator.Visible = btnDeleteTempDiff.Visible && HasVisibleBrushButtons();
|
|
||||||
}
|
|
||||||
if (secondSeparator != null)
|
|
||||||
{
|
|
||||||
// 第二个分隔条:前面按钮(所有画笔按钮)和后面按钮(新按钮组)都不可见
|
|
||||||
secondSeparator.Visible = HasVisibleBrushButtons() && HasVisibleNewButtons();
|
|
||||||
}
|
|
||||||
if (thirdSeparator != null)
|
|
||||||
{
|
|
||||||
// 在温差图绘制状态下,txtRegionNumber是隐藏的,所以分隔条也应该隐藏
|
|
||||||
thirdSeparator.Visible = false;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 1: // 选中区域状态
|
case 1: // 选中区域状态
|
||||||
btnDrawRegion.Visible = false; // 隐藏绘制区域按钮
|
btnDrawRegion.Visible = false; // 隐藏绘制区域按钮
|
||||||
@@ -1169,22 +1171,8 @@ namespace JoyD.Windows.CS
|
|||||||
btnBrushSize10.Visible = false;
|
btnBrushSize10.Visible = false;
|
||||||
btnBrushSize15.Visible = false;
|
btnBrushSize15.Visible = false;
|
||||||
btnBrushSize25.Visible = false;
|
btnBrushSize25.Visible = false;
|
||||||
// 控制分隔条可见性:分隔条只有在前后都有可见按钮时才显示
|
// 调用通用方法控制分隔条可见性
|
||||||
if (firstSeparator != null)
|
UpdateSeparatorsVisibility();
|
||||||
{
|
|
||||||
// 第一个分隔条:前面按钮(btnDeleteTempDiff)和后面按钮(所有画笔按钮)都不可见
|
|
||||||
firstSeparator.Visible = btnDeleteTempDiff.Visible && HasVisibleBrushButtons();
|
|
||||||
}
|
|
||||||
if (secondSeparator != null)
|
|
||||||
{
|
|
||||||
// 第二个分隔条:前面按钮(所有画笔按钮)和后面按钮(新按钮组)都不可见
|
|
||||||
secondSeparator.Visible = HasVisibleBrushButtons() && HasVisibleNewButtons();
|
|
||||||
}
|
|
||||||
if (thirdSeparator != null)
|
|
||||||
{
|
|
||||||
// 在选中区域状态下,txtRegionNumber后面的分隔条应该隐藏
|
|
||||||
thirdSeparator.Visible = false;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: // 温差图绘制状态
|
case 3: // 温差图绘制状态
|
||||||
@@ -1213,22 +1201,8 @@ namespace JoyD.Windows.CS
|
|||||||
btnBrushSize10.Visible = false;
|
btnBrushSize10.Visible = false;
|
||||||
btnBrushSize15.Visible = false;
|
btnBrushSize15.Visible = false;
|
||||||
btnBrushSize25.Visible = false;
|
btnBrushSize25.Visible = false;
|
||||||
// 控制分隔条可见性:分隔条只有在前后都有可见按钮时才显示
|
// 调用通用方法控制分隔条可见性
|
||||||
if (firstSeparator != null)
|
UpdateSeparatorsVisibility();
|
||||||
{
|
|
||||||
// 第一个分隔条:前面按钮(btnDeleteTempDiff)可见,检查后面是否有可见的画笔按钮
|
|
||||||
firstSeparator.Visible = btnDeleteTempDiff.Visible && HasVisibleBrushButtons();
|
|
||||||
}
|
|
||||||
if (secondSeparator != null)
|
|
||||||
{
|
|
||||||
// 第二个分隔条:前面按钮(所有画笔按钮)和后面按钮(新按钮组)都不可见
|
|
||||||
secondSeparator.Visible = HasVisibleBrushButtons() && HasVisibleNewButtons();
|
|
||||||
}
|
|
||||||
if (thirdSeparator != null)
|
|
||||||
{
|
|
||||||
// 在绘制状态下,txtRegionNumber后面的分隔条应该隐藏
|
|
||||||
thirdSeparator.Visible = false;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user