From 99a333e35f6319f2a54cd6e140c4ebf8a7dffe8d Mon Sep 17 00:00:00 2001 From: zqm Date: Tue, 11 Nov 2025 14:58:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=E5=B7=A5=E5=85=B7=E6=A0=8F=E4=B8=AD?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=BE=E7=BD=AE=E9=80=89=E4=B8=AD=E6=B5=8B?= =?UTF-8?q?=E6=B8=A9=E5=8C=BA=E7=BC=96=E5=8F=B7=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CS/Framework4.0/Toprie/Toprie/Setting.cs | 101 +++++++++++++++++- 1 file changed, 100 insertions(+), 1 deletion(-) diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs index 3a943b2..3553e36 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs @@ -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 /// /// 保存测温区按钮点击事件 /// + /// + /// 区域编号文本框按键事件处理 + /// + private void txtRegionNumber_KeyDown(object sender, KeyEventArgs e) + { + // 当用户按下Enter键时更新区域编号 + if (e.KeyCode == Keys.Enter) + { + UpdateRegionNumber(); + } + } + + /// + /// 区域编号文本框内容变化事件处理 + /// + 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; + } + } + + /// + /// 更新选中区域的编号 + /// + 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; } }