在工具栏中添加设置选中测温区编号的功能

This commit is contained in:
zqm
2025-11-11 14:58:15 +08:00
parent eb09890c94
commit 99a333e35f

View File

@@ -1058,6 +1058,18 @@ namespace JoyD.Windows.CS
btnNewTempDiff.Visible = false;
btnLoadTempDiff.Visible = false;
btnSaveTempDiff.Visible = false;
// 显示区域编号设置控件
lblRegionNumber.Visible = true;
txtRegionNumber.Visible = true;
// 更新文本框的值为当前选中区域的编号
if (_selectedRegionIndex != -1)
{
var selectedRegion = _drawnRectangles.FirstOrDefault(r => r.Index == _selectedRegionIndex);
if (selectedRegion != null)
{
txtRegionNumber.Text = selectedRegion.Index.ToString();
}
}
// 隐藏所有画笔大小按钮
btnBrushSize1.Visible = false;
btnBrushSize3.Visible = false;
@@ -1074,6 +1086,12 @@ namespace JoyD.Windows.CS
{
secondSeparator.Visible = false; // 前面按钮(所有画笔按钮)和后面按钮(新按钮组)都不可见
}
// 在初始状态下隐藏区域编号设置控件
if (state == 0)
{
lblRegionNumber.Visible = false;
txtRegionNumber.Visible = false;
txtRegionNumber.Text = ""; // 清空文本框
break;
case 1: // 选中区域状态
btnDrawRegion.Visible = false; // 隐藏绘制区域按钮
@@ -3020,6 +3038,8 @@ namespace JoyD.Windows.CS
// 移除所有已有的测温区列表
_drawnRectangles.Clear();
_selectedRegionIndex = -1;
// 清空区域编号文本框
txtRegionNumber.Text = "";
// 用透明色清空叠加层图像
CreateRectangleOverlayImage();
@@ -3112,6 +3132,78 @@ namespace JoyD.Windows.CS
/// <summary>
/// 保存测温区按钮点击事件
/// </summary>
/// <summary>
/// 区域编号文本框按键事件处理
/// </summary>
private void txtRegionNumber_KeyDown(object sender, KeyEventArgs e)
{
// 当用户按下Enter键时更新区域编号
if (e.KeyCode == Keys.Enter)
{
UpdateRegionNumber();
}
}
/// <summary>
/// 区域编号文本框内容变化事件处理
/// </summary>
private void txtRegionNumber_TextChanged(object sender, EventArgs e)
{
// 只允许输入数字
string text = txtRegionNumber.Text;
string newText = new string(text.Where(char.IsDigit).ToArray());
if (text != newText)
{
txtRegionNumber.Text = newText;
txtRegionNumber.SelectionStart = newText.Length;
}
}
/// <summary>
/// 更新选中区域的编号
/// </summary>
private void UpdateRegionNumber()
{
if (_selectedRegionIndex != -1 && int.TryParse(txtRegionNumber.Text, out int newNumber))
{
// 检查新编号是否已经存在
if (_drawnRectangles.Any(r => r.Index == newNumber && r.Index != _selectedRegionIndex))
{
MessageBox.Show("该编号已存在,请选择其他编号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
// 恢复原编号
var selectedRegion = _drawnRectangles.FirstOrDefault(r => r.Index == _selectedRegionIndex);
if (selectedRegion != null)
{
txtRegionNumber.Text = selectedRegion.Index.ToString();
}
return;
}
// 更新区域编号
var region = _drawnRectangles.FirstOrDefault(r => r.Index == _selectedRegionIndex);
if (region != null)
{
region.Index = newNumber;
_selectedRegionIndex = newNumber; // 更新选中索引
// 重新绘制
CreateRectangleOverlayImage();
picBoxTemp.Invalidate();
}
}
else if (!string.IsNullOrEmpty(txtRegionNumber.Text))
{
// 输入不是有效的数字
MessageBox.Show("请输入有效的数字编号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
// 恢复原编号
var selectedRegion = _drawnRectangles.FirstOrDefault(r => r.Index == _selectedRegionIndex);
if (selectedRegion != null)
{
txtRegionNumber.Text = selectedRegion.Index.ToString();
}
}
}
private void BtnSaveTempRegion_Click(object sender, EventArgs e)
{
try
@@ -3148,7 +3240,8 @@ namespace JoyD.Windows.CS
string colorHex = ColorTranslator.ToHtml(region.Color);
// 写入一行数据,格式:索引,X坐标,Y坐标,宽度,高度,颜色
writer.WriteLine($"{region.Index},{region.ImageRectangle.X},{region.ImageRectangle.Y},{region.ImageRectangle.Width},{region.ImageRectangle.Height},{colorHex}");
// 保存时使用最新的编号
writer.WriteLine($"{region.Index},{region.ImageRectangle.X},{region.ImageRectangle.Y},{region.ImageRectangle.Width},{region.ImageRectangle.Height},{colorHex}");
}
}
@@ -3175,6 +3268,8 @@ namespace JoyD.Windows.CS
// 取消选中状态
_selectedRegionIndex = -1;
// 清空区域编号文本框
txtRegionNumber.Text = "";
// 用透明色清空叠加层图像
CreateRectangleOverlayImage();
@@ -3572,6 +3667,8 @@ namespace JoyD.Windows.CS
{
// 取消选中状态
_selectedRegionIndex = -1;
// 清空区域编号文本框
txtRegionNumber.Text = "";
// 使用统一的方法更新按钮可见性,设置为就绪状态
UpdateButtonsVisibility(0); // 0表示初始状态/就绪状态
@@ -3596,6 +3693,8 @@ namespace JoyD.Windows.CS
// 选中该区域(点击已选中区域不再取消选中)
_selectedRegionIndex = region.Index;
clickedOnRegion = true;
// 更新区域编号文本框
txtRegionNumber.Text = region.Index.ToString();
break;
}
}