You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
245 lines
9.8 KiB
C#
245 lines
9.8 KiB
C#
using Rs.Framework;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Runtime.Remoting;
|
|
using System.Security.Claims;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Rs.Controls
|
|
{
|
|
/// <summary>
|
|
/// 穴位偏移控件
|
|
/// </summary>
|
|
public partial class SlotOffsetCtl : UserControl
|
|
{
|
|
public event Action<int,string,double> SlotValueChanged;
|
|
public int RowNum { get; set; } = 9;
|
|
public int ColumnNum { get; set; } = 10;
|
|
public string TrayName { get; set; }
|
|
|
|
public DataTable DataSource { get; set; }
|
|
|
|
private RectangleF selectRect;
|
|
private Dictionary<int, double> xDic = new Dictionary<int, double>();
|
|
private Dictionary<int, double> yDic = new Dictionary<int, double>();
|
|
private Dictionary<int, TextBox> txtXDic = new Dictionary<int, TextBox>();
|
|
private Dictionary<int, TextBox> txtYDic = new Dictionary<int, TextBox>();
|
|
public SlotOffsetCtl()
|
|
{
|
|
InitializeComponent();
|
|
selectRect = new RectangleF();
|
|
}
|
|
|
|
private void SlotOffsetCtl_Load(object sender, EventArgs e)
|
|
{
|
|
if(ObjectHelper.IsNotNullorEmpty(DataSource))
|
|
{
|
|
foreach (DataRow dataRow in DataSource.Rows)
|
|
{
|
|
xDic.Add(int.Parse(dataRow["slotindex"].ToString()), double.Parse(dataRow["offsetx"].ToString()));
|
|
yDic.Add(int.Parse(dataRow["slotindex"].ToString()), double.Parse(dataRow["offsety"].ToString()));
|
|
}
|
|
}
|
|
tableLayoutPanel1.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
|
|
//tlpColHeader.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
|
|
//tlpRowHeader.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
|
|
tableLayoutPanel1.RowStyles.Clear();
|
|
tableLayoutPanel1.ColumnStyles.Clear();
|
|
|
|
tlpColHeader.RowStyles.Clear();
|
|
tlpColHeader.ColumnStyles.Clear();
|
|
tlpRowHeader.RowStyles.Clear();
|
|
tlpRowHeader.ColumnStyles.Clear();
|
|
float colpercent = 100 / ColumnNum;
|
|
float rowpercent = 100 / RowNum;
|
|
tableLayoutPanel1.ColumnCount= ColumnNum;
|
|
tableLayoutPanel1.RowCount= RowNum;
|
|
|
|
tlpColHeader.ColumnCount = ColumnNum;
|
|
tlpColHeader.RowCount = 1;
|
|
|
|
tlpRowHeader.ColumnCount = 1;
|
|
tlpRowHeader.RowCount = RowNum;
|
|
for (int i=0;i<ColumnNum;i++)
|
|
{
|
|
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, colpercent));
|
|
tlpColHeader.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, colpercent));
|
|
tlpRowHeader.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100));
|
|
}
|
|
for (int i = 0; i < RowNum; i++)
|
|
{
|
|
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, rowpercent));
|
|
tlpRowHeader.RowStyles.Add(new RowStyle(SizeType.Percent, rowpercent));
|
|
tlpColHeader.RowStyles.Add(new RowStyle(SizeType.Percent, 100));
|
|
}
|
|
//添加列序号
|
|
for (int i = 0; i < ColumnNum; i++)
|
|
{
|
|
int num = i + 1;
|
|
Label lblColHeader = new Label();
|
|
lblColHeader.TextAlign = ContentAlignment.MiddleCenter;
|
|
lblColHeader.Text = num.ToString();
|
|
lblColHeader.Dock = DockStyle.Fill;
|
|
lblColHeader.AutoSize = false;
|
|
lblColHeader.ForeColor = Color.White;
|
|
tlpColHeader.Controls.Add(lblColHeader, i, 0);
|
|
}
|
|
|
|
for (int i = 0; i < RowNum; i++)
|
|
{
|
|
int num = i + 1;
|
|
Label lblRowHeader = new Label();
|
|
lblRowHeader.TextAlign = ContentAlignment.MiddleCenter;
|
|
lblRowHeader.Text = num.ToString();
|
|
lblRowHeader.Dock = DockStyle.Fill;
|
|
lblRowHeader.AutoSize = false;
|
|
lblRowHeader.ForeColor = Color.White;
|
|
tlpRowHeader.Controls.Add(lblRowHeader, 0, i);
|
|
}
|
|
|
|
int slotIndex = 0;
|
|
for (int r = 0; r < RowNum; r++)
|
|
{
|
|
for (int c = 0; c < ColumnNum; c++)
|
|
{
|
|
slotIndex += 1;
|
|
TableLayoutPanel tableLayoutPanel= new TableLayoutPanel();
|
|
tableLayoutPanel.Dock = DockStyle.Fill;
|
|
tableLayoutPanel.RowCount = 2;
|
|
tableLayoutPanel.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
|
|
tableLayoutPanel.RowStyles.Clear();
|
|
tableLayoutPanel.ColumnStyles.Clear();
|
|
tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 50));
|
|
tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 50));
|
|
TextBox txtOffsetX = new TextBox();
|
|
txtOffsetX.TextAlign = HorizontalAlignment.Center;
|
|
txtOffsetX.Size = new Size(50, 30);
|
|
if(xDic.ContainsKey(slotIndex))
|
|
{
|
|
txtOffsetX.Text = xDic[slotIndex].ToString("0.000");
|
|
}
|
|
else
|
|
{
|
|
txtOffsetX.Text = "0";
|
|
}
|
|
txtXDic.Add(slotIndex, txtOffsetX);
|
|
txtOffsetX.Font = new Font("宋体", 9);
|
|
txtOffsetX.ForeColor = Color.White;
|
|
//txtOffsetX.Dock = DockStyle.Fill;
|
|
txtOffsetX.BorderStyle = BorderStyle.None;
|
|
txtOffsetX.BackColor = Color.FromArgb(56, 56, 56);
|
|
txtOffsetX.KeyUp += TxtOffsetX_KeyUp;
|
|
txtOffsetX.Tag = slotIndex;
|
|
|
|
|
|
TextBox txtOffsetY = new TextBox();
|
|
txtOffsetY.TextAlign = HorizontalAlignment.Center;
|
|
txtOffsetY.Size = new Size(50, 30);
|
|
if (yDic.ContainsKey(slotIndex))
|
|
{
|
|
txtOffsetY.Text = xDic[slotIndex].ToString("0.000");
|
|
}
|
|
else
|
|
{
|
|
txtOffsetY.Text = "0";
|
|
}
|
|
txtYDic.Add(slotIndex, txtOffsetY);
|
|
txtOffsetY.Font = new Font("宋体", 9);
|
|
txtOffsetY.ForeColor = Color.White;
|
|
//txtOffsetY.Dock = DockStyle.Fill;
|
|
txtOffsetY.BorderStyle = BorderStyle.None;
|
|
txtOffsetY.BackColor = Color.FromArgb(56, 56, 56);
|
|
txtOffsetY.KeyUp += TxtOffsetY_KeyUp;
|
|
txtOffsetY.Tag = slotIndex;
|
|
|
|
tableLayoutPanel.Controls.Add(txtOffsetX, 0, 0);
|
|
tableLayoutPanel.Controls.Add(txtOffsetY, 0, 1);
|
|
//Label lblColHeader = new Label();
|
|
//lblColHeader.MouseDown += LblColHeader_MouseDown;
|
|
//lblColHeader.TextAlign = ContentAlignment.MiddleCenter;
|
|
//lblColHeader.Text = slotIndex.ToString();
|
|
//lblColHeader.Dock = DockStyle.Fill;
|
|
//lblColHeader.AutoSize = false;
|
|
//lblColHeader.ForeColor = Color.White;
|
|
tableLayoutPanel1.Controls.Add(tableLayoutPanel, c, r);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public void DataBind(DataTable data)
|
|
{
|
|
foreach (DataRow dataRow in data.Rows)
|
|
{
|
|
int slotIndex = int.Parse(dataRow["slotindex"].ToString());
|
|
if(txtXDic.ContainsKey(slotIndex))
|
|
{
|
|
txtXDic[slotIndex].Text = dataRow["offsetX"].ToString();
|
|
txtYDic[slotIndex].Text = dataRow["offsetY"].ToString();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void TxtOffsetX_KeyUp(object sender, KeyEventArgs e)
|
|
{
|
|
if(e.KeyCode== Keys.Enter)
|
|
{
|
|
TextBox txtSlot=(TextBox)sender;
|
|
SlotValueChanged?.Invoke(int.Parse(txtSlot.Tag.ToString()),"X",double.Parse(txtSlot.Text));
|
|
}
|
|
}
|
|
|
|
private void TxtOffsetY_KeyUp(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyCode == Keys.Enter)
|
|
{
|
|
TextBox txtSlot = (TextBox)sender;
|
|
SlotValueChanged?.Invoke(int.Parse(txtSlot.Tag.ToString()), "Y", double.Parse(txtSlot.Text));
|
|
}
|
|
}
|
|
|
|
private void LblColHeader_MouseDown(object sender, MouseEventArgs e)
|
|
{
|
|
tableLayoutPanel1_MouseDown(sender, e);
|
|
}
|
|
|
|
private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e)
|
|
{
|
|
this.DoubleBuffered = true;
|
|
Graphics g = this.tableLayoutPanel1.CreateGraphics();
|
|
g.FillRectangle(new SolidBrush(Color.FromArgb(200, Color.Pink)), selectRect);
|
|
}
|
|
private bool drawRegion = false;
|
|
private void tableLayoutPanel1_MouseDown(object sender, MouseEventArgs e)
|
|
{
|
|
if (e.Button == MouseButtons.Left && drawRegion == false)
|
|
{
|
|
drawRegion = true;
|
|
selectRect.X = e.X;
|
|
selectRect.Y = e.Y;
|
|
}
|
|
}
|
|
|
|
private void tableLayoutPanel1_MouseMove(object sender, MouseEventArgs e)
|
|
{
|
|
if (drawRegion)
|
|
{
|
|
selectRect.Width = e.X - selectRect.X;
|
|
selectRect.Height = e.Y - selectRect.Y;
|
|
tableLayoutPanel1_Paint(null, null);
|
|
}
|
|
}
|
|
|
|
private void tableLayoutPanel1_MouseUp(object sender, MouseEventArgs e)
|
|
{
|
|
drawRegion = false;
|
|
}
|
|
}
|
|
}
|