将温差图例表中颜色列的按钮改为显示颜色块
This commit is contained in:
@@ -85,6 +85,9 @@ namespace JoyD.Windows.CS
|
||||
/// <summary>
|
||||
/// 鼠标按下事件 - 处理右击退出绘制状态、左击开始绘制矩形和开始调整区域大小
|
||||
/// </summary>
|
||||
// 存储温差值和对应颜色的数据结构
|
||||
private List<Dictionary<string, object>> tempDiffData = new List<Dictionary<string, object>>();
|
||||
|
||||
private void InitializeTempDiffDataGridView()
|
||||
{
|
||||
// 设置整个DataGridView为只读
|
||||
@@ -104,13 +107,13 @@ namespace JoyD.Windows.CS
|
||||
};
|
||||
|
||||
// 添加列:颜色
|
||||
DataGridViewButtonColumn columnColor = new DataGridViewButtonColumn
|
||||
DataGridViewTextBoxColumn columnColor = new DataGridViewTextBoxColumn
|
||||
{
|
||||
Name = "colorColumn",
|
||||
HeaderText = "颜色",
|
||||
Width = 80,
|
||||
Text = "选择",
|
||||
UseColumnTextForButtonValue = true
|
||||
ReadOnly = true,
|
||||
CellTemplate = new DataGridViewTextBoxCell()
|
||||
};
|
||||
|
||||
// 添加列到DataGridView
|
||||
@@ -118,8 +121,10 @@ namespace JoyD.Windows.CS
|
||||
dataGridViewTempDiff.Columns.Add(columnTempDiff);
|
||||
dataGridViewTempDiff.Columns.Add(columnColor);
|
||||
|
||||
// 添加按钮点击事件
|
||||
dataGridViewTempDiff.CellContentClick += new DataGridViewCellEventHandler(DataGridViewTempDiff_CellContentClick);
|
||||
// 添加单元格绘制事件用于显示颜色块
|
||||
dataGridViewTempDiff.CellPainting += new DataGridViewCellPaintingEventHandler(DataGridViewTempDiff_CellPainting);
|
||||
// 添加点击事件用于选择颜色
|
||||
dataGridViewTempDiff.CellClick += new DataGridViewCellEventHandler(DataGridViewTempDiff_CellClick);
|
||||
|
||||
// 添加一些示例数据
|
||||
AddSampleTempDiffData();
|
||||
@@ -127,25 +132,88 @@ namespace JoyD.Windows.CS
|
||||
|
||||
private void AddSampleTempDiffData()
|
||||
{
|
||||
// 添加示例行
|
||||
dataGridViewTempDiff.Rows.Add("10°C", "选择");
|
||||
dataGridViewTempDiff.Rows.Add("20°C", "选择");
|
||||
dataGridViewTempDiff.Rows.Add("30°C", "选择");
|
||||
// 清除现有数据
|
||||
tempDiffData.Clear();
|
||||
dataGridViewTempDiff.Rows.Clear();
|
||||
|
||||
// 添加示例数据并设置默认颜色
|
||||
AddTempDiffRow("10°C", Color.Blue);
|
||||
AddTempDiffRow("20°C", Color.Green);
|
||||
AddTempDiffRow("30°C", Color.Red);
|
||||
}
|
||||
|
||||
private void DataGridViewTempDiff_CellContentClick(object sender, DataGridViewCellEventArgs e)
|
||||
private void AddTempDiffRow(string tempDiffValue, Color color)
|
||||
{
|
||||
if (e.RowIndex >= 0)
|
||||
// 添加到数据列表
|
||||
Dictionary<string, object> rowData = new Dictionary<string, object>
|
||||
{
|
||||
// 处理颜色选择按钮点击
|
||||
{ "tempDiffValue", tempDiffValue },
|
||||
{ "color", color }
|
||||
};
|
||||
tempDiffData.Add(rowData);
|
||||
|
||||
// 添加到DataGridView
|
||||
dataGridViewTempDiff.Rows.Add(tempDiffValue, "");
|
||||
}
|
||||
|
||||
private void DataGridViewTempDiff_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
|
||||
{
|
||||
// 只处理颜色列
|
||||
if (e.ColumnIndex == dataGridViewTempDiff.Columns["colorColumn"].Index && e.RowIndex >= 0)
|
||||
{
|
||||
// 清空单元格内容
|
||||
e.PaintBackground(e.CellBounds, true);
|
||||
|
||||
// 确保行索引有效
|
||||
if (e.RowIndex < tempDiffData.Count)
|
||||
{
|
||||
// 获取当前行的颜色
|
||||
Color color = (Color)tempDiffData[e.RowIndex]["color"];
|
||||
|
||||
// 创建颜色块的绘制区域(居中显示,留出边距)
|
||||
Rectangle colorBlock = new Rectangle(
|
||||
e.CellBounds.X + 10,
|
||||
e.CellBounds.Y + 3,
|
||||
e.CellBounds.Width - 20,
|
||||
e.CellBounds.Height - 6
|
||||
);
|
||||
|
||||
// 绘制颜色块
|
||||
using (SolidBrush brush = new SolidBrush(color))
|
||||
{
|
||||
e.Graphics.FillRectangle(brush, colorBlock);
|
||||
}
|
||||
|
||||
// 添加边框
|
||||
using (Pen pen = new Pen(Color.Black))
|
||||
{
|
||||
e.Graphics.DrawRectangle(pen, colorBlock);
|
||||
}
|
||||
}
|
||||
|
||||
// 标记单元格已绘制
|
||||
e.Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void DataGridViewTempDiff_CellClick(object sender, DataGridViewCellEventArgs e)
|
||||
{
|
||||
if (e.RowIndex >= 0 && e.RowIndex < tempDiffData.Count)
|
||||
{
|
||||
// 处理颜色列点击
|
||||
if (e.ColumnIndex == dataGridViewTempDiff.Columns["colorColumn"].Index)
|
||||
{
|
||||
using (ColorDialog colorDialog = new ColorDialog())
|
||||
{
|
||||
// 设置初始颜色为当前行的颜色
|
||||
colorDialog.Color = (Color)tempDiffData[e.RowIndex]["color"];
|
||||
|
||||
if (colorDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
// 这里可以保存选择的颜色
|
||||
Console.WriteLine("选择的颜色: " + colorDialog.Color.Name);
|
||||
// 更新颜色数据
|
||||
tempDiffData[e.RowIndex]["color"] = colorDialog.Color;
|
||||
// 刷新单元格以显示新颜色
|
||||
dataGridViewTempDiff.Refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user