using System.Diagnostics.Eventing.Reader;
|
using System.Drawing;
|
using System.Runtime.CompilerServices;
|
using System.Windows.Forms;
|
|
namespace DPumpHydr.WinFrmUI.WenSkin.Controls
|
{
|
public class WenTreeDataGridViewTextBoxCell : DataGridViewTextBoxCell
|
{
|
private TreeDataGridViewCellValues Values { get; set; }
|
protected override void Paint(Graphics g, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
|
{
|
base.Paint(g, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts);
|
|
if (value is TreeDataGridViewCellValues treeData)
|
{
|
int indent = treeData.Indent * treeData.Level + 3;
|
|
RectangleF rec = new RectangleF(cellBounds.X, cellBounds.Y + 1, cellBounds.Width - 1, cellBounds.Height - 2);
|
|
|
ControlHelper.SetGDIHigh(g);
|
|
RectangleF recStr = new RectangleF(rec.X + 16 + indent, rec.Y, rec.Width, rec.Height);
|
|
if ((cellState | DataGridViewElementStates.Selected) == cellState)
|
{
|
g.FillRectangle(new SolidBrush(cellStyle.SelectionBackColor), rec);
|
g.DrawString(treeData.Text, cellStyle.Font, new SolidBrush(cellStyle.SelectionForeColor), recStr, ControlHelper.StringConters);
|
}
|
else
|
{
|
g.FillRectangle(new SolidBrush(cellStyle.BackColor), rec);
|
g.DrawString(treeData.Text, cellStyle.Font, new SolidBrush(cellStyle.ForeColor), recStr, ControlHelper.StringConters);
|
}
|
|
#region 其他方法
|
|
|
//按钮区域
|
//Rectangle recButton = new Rectangle((int)rec.X + indent, (int)rec.Y + (int)(rec.Height - 12) / 2, 12, 12);
|
|
//用gdi绘制
|
|
//g.DrawRectangle(Pens.Gray, recButton);
|
|
////绘制横线一条 -
|
|
//g.DrawLine(Pens.Black, recButton.X+1, recButton.Y + 6, recButton.X + 10, recButton.Y + 6);
|
|
//if (treeData.CellState)
|
// g.DrawLine(Pens.Black, recButton.X + 6, recButton.Y+1, recButton.X + 6, recButton.Y + 10);
|
|
////画虚线
|
//using (Pen p=new Pen(Color.Gray) {DashStyle=System.Drawing.Drawing2D.DashStyle.Dot })
|
//{
|
// Rectangle xian=DataGridView.Rows[rowIndex].Cells[]
|
// g.DrawLine(p,)
|
//}
|
|
#endregion
|
|
// 采用图片绘制
|
Image image = WenSkin.Properties.Resources.sanjiaoxing;
|
image.RotateFlip(RotateFlipType.Rotate180FlipNone);
|
if (treeData.CellState)
|
image.RotateFlip(RotateFlipType.Rotate270FlipNone);
|
|
|
g.DrawImage(image, rec.X + indent, rec.Y + (rec.Height - 16) / 2, 16, 16);
|
}
|
}
|
|
protected override void OnMouseClick(DataGridViewCellMouseEventArgs e)
|
{
|
base.OnMouseClick(e);
|
|
Rectangle cellRec = this.ContentBounds;
|
|
if (this.Value is TreeDataGridViewCellValues treeData)
|
{
|
Rectangle rec = new Rectangle(treeData.Level * treeData.Indent
|
, (cellRec.Height - 16) / 2, 16, 16);
|
if (rec.Contains(e.Location))
|
{
|
if (!treeData.CellState)
|
{
|
CloseSubNode(treeData.Nodes, e.ColumnIndex);
|
treeData.CellState = true;
|
}
|
else
|
{
|
foreach (TreeDataGridViewRowNode item in treeData.Nodes)
|
{
|
item.DataGridViewRow.Visible = true;
|
}
|
treeData.CellState = false;
|
}
|
}
|
}
|
}
|
private void CloseSubNode(TreeDataGridViewRowNodeCollection nodes, int columnIndex)
|
{
|
foreach (TreeDataGridViewRowNode item in nodes)
|
{
|
item.DataGridViewRow.Visible = false;
|
if (item.DataGridViewRow.Cells[columnIndex].Value is TreeDataGridViewCellValues values)
|
{
|
values.CellState = true;
|
}
|
if (item.Nodes.Count > 0)
|
CloseSubNode(item.Nodes, columnIndex);
|
}
|
}
|
|
//值变化
|
protected override bool SetValue(int rowIndex, object value)
|
{
|
if (value is TreeDataGridViewCellValues treeData)
|
{
|
Values = treeData;
|
return base.SetValue(rowIndex, value);
|
}
|
else if (Values is TreeDataGridViewCellValues v)
|
{
|
v.Text = value?.ToString();
|
return base.SetValue(rowIndex, this.Values);
|
}
|
return base.SetValue(rowIndex, value);
|
}
|
}
|
}
|