修改温差图例管理相关方法,确保添加和修改图例时温度和颜色都没有重复

This commit is contained in:
zqm
2025-11-11 10:34:11 +08:00
parent a8da65fd1a
commit edb409557f

View File

@@ -613,13 +613,22 @@ namespace JoyD.Windows.CS
return; return;
} }
// 检查温度值是否已存在(排除当前正在编辑的行)
string tempString = $"{tempValue}°C";
if (IsTempValueExists(tempString, e.RowIndex))
{
dataGridViewTempDiff.Rows[e.RowIndex].ErrorText = "该温度值已存在";
e.Cancel = true;
return;
}
// 清除错误信息 // 清除错误信息
dataGridViewTempDiff.Rows[e.RowIndex].ErrorText = string.Empty; dataGridViewTempDiff.Rows[e.RowIndex].ErrorText = string.Empty;
// 更新数据模型 // 更新数据模型
if (e.RowIndex < tempDiffData.Count) if (e.RowIndex < tempDiffData.Count)
{ {
tempDiffData[e.RowIndex]["tempDiffValue"] = $"{tempValue}°C"; tempDiffData[e.RowIndex]["tempDiffValue"] = tempString;
} }
} }
} }
@@ -804,6 +813,14 @@ namespace JoyD.Windows.CS
if (colorDialog.ShowDialog() == DialogResult.OK) if (colorDialog.ShowDialog() == DialogResult.OK)
{ {
Color newColor = colorDialog.Color; Color newColor = colorDialog.Color;
// 检查颜色是否已存在(排除当前正在编辑的行)
if (IsColorExists(newColor, e.RowIndex))
{
MessageBox.Show("该颜色已存在,请选择其他颜色", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
// 更新颜色数据 // 更新颜色数据
tempDiffData[e.RowIndex]["color"] = newColor; tempDiffData[e.RowIndex]["color"] = newColor;
// 刷新单元格以显示新颜色 // 刷新单元格以显示新颜色
@@ -1199,10 +1216,27 @@ namespace JoyD.Windows.CS
{ {
try try
{ {
// 添加新的温差图例,提供默认值和颜色 // 查找可用的温度值,确保不重复
int defaultTemp = tempDiffData.Count > 0 ? tempDiffData.Count * 10 : 10; int tempValue = 10;
Color defaultColor = GetNextDefaultColor(tempDiffData.Count); while (true)
AddTempDiffRow($"{defaultTemp}°C", defaultColor); {
string tempString = $"{tempValue}°C";
if (!IsTempValueExists(tempString))
break;
tempValue += 10;
}
// 查找可用的颜色,确保不重复
int colorIndex = 0;
Color defaultColor;
do
{
defaultColor = GetNextDefaultColor(colorIndex);
colorIndex++;
} while (IsColorExists(defaultColor));
// 添加新的温差图例
AddTempDiffRow($"{tempValue}°C", defaultColor);
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -1210,6 +1244,46 @@ namespace JoyD.Windows.CS
} }
} }
// 检查温度值是否已存在(忽略单位,只比较数值部分)
private bool IsTempValueExists(string tempValue, int excludeRowIndex = -1)
{
// 提取数值部分
string numericValue = System.Text.RegularExpressions.Regex.Replace(tempValue, @"[^0-9.-]", "");
if (!float.TryParse(numericValue, out float currentTemp))
return false;
// 遍历所有数据行进行比较
for (int i = 0; i < tempDiffData.Count; i++)
{
// 跳过被排除的行(用于修改操作)
if (i == excludeRowIndex) continue;
string existingTempValue = tempDiffData[i]["tempDiffValue"].ToString();
string existingNumericValue = System.Text.RegularExpressions.Regex.Replace(existingTempValue, @"[^0-9.-]", "");
if (float.TryParse(existingNumericValue, out float existingTemp))
{
if (Math.Abs(currentTemp - existingTemp) < 0.001) // 浮点数比较,使用容差
return true;
}
}
return false;
}
// 检查颜色是否已存在
private bool IsColorExists(Color color, int excludeRowIndex = -1)
{
for (int i = 0; i < tempDiffData.Count; i++)
{
// 跳过被排除的行(用于修改操作)
if (i == excludeRowIndex) continue;
Color existingColor = (Color)tempDiffData[i]["color"];
if (existingColor.ToArgb() == color.ToArgb())
return true;
}
return false;
}
// 获取下一个默认颜色 // 获取下一个默认颜色
private Color GetNextDefaultColor(int index) private Color GetNextDefaultColor(int index)
{ {