diff --git a/CodeMatrix/FormMain.cs b/CodeMatrix/FormMain.cs index bdb8292..df564d2 100644 --- a/CodeMatrix/FormMain.cs +++ b/CodeMatrix/FormMain.cs @@ -20,6 +20,10 @@ namespace CodeMatrix var codeMatrix = new UCCodeMatrix(); var codeQueue = new UCCodeQueue(); + + codeMatrix.HoverValueChangedEvent += (_, value) => codeQueue.HoverCode = value; + codeMatrix.CodeSelectedEvent += (_, value) => codeQueue.InputCode(value); + codeQueue.Location = new Point(codeMatrix.Size.Width, 0); Controls.Add(codeMatrix); Controls.Add(codeQueue); diff --git a/CodeMatrix/UCCodeMatrix.cs b/CodeMatrix/UCCodeMatrix.cs index 586143c..bb635e0 100644 --- a/CodeMatrix/UCCodeMatrix.cs +++ b/CodeMatrix/UCCodeMatrix.cs @@ -15,8 +15,22 @@ namespace CodeMatrix public byte[,] Matrix { get; set; } public Point SelectPoint { get; private set; } public Point CursorPoint { get; private set; } - public Point HoverPoint { get; private set; } + private Point _HoverPoint; + public Point HoverPoint + { + get => _HoverPoint; + set + { + _HoverPoint = value; + if (HoverPoint.X >= 0) + HoverValueChangedEvent?.Invoke(this, Matrix[HoverPoint.X, HoverPoint.Y]); + else + HoverValueChangedEvent?.Invoke(this, 0); + } + } public RectangleF CodeMatrixRect { get; private set; } + public event EventHandler HoverValueChangedEvent; + public event EventHandler CodeSelectedEvent; /// /// 方向 @@ -179,7 +193,6 @@ namespace CodeMatrix HoverPoint = hoverPoint; Invalidate(); } - } } else @@ -199,11 +212,11 @@ namespace CodeMatrix { SelectPoint = HoverPoint; HoverPoint = new Point(-1, -1); - Matrix[SelectPoint.X, SelectPoint.Y] = 0; _currDir = _currDir == Directions.Horizontal ? Directions.Vertical : Directions.Horizontal; + CodeSelectedEvent?.Invoke(this, Matrix[SelectPoint.X, SelectPoint.Y]); + Matrix[SelectPoint.X, SelectPoint.Y] = 0; Invalidate(); } - base.OnMouseClick(e); } } diff --git a/CodeMatrix/UCCodeQueue.cs b/CodeMatrix/UCCodeQueue.cs index 43c6cb0..5a1bbb2 100644 --- a/CodeMatrix/UCCodeQueue.cs +++ b/CodeMatrix/UCCodeQueue.cs @@ -12,7 +12,16 @@ namespace CodeMatrix { public Size CellSize { get; private set; } public Padding CellMargin { get; set; } - public byte HoverCode { get; set; } + private byte _HoverCode; + public byte HoverCode + { + get => _HoverCode; + set + { + _HoverCode = value; + Invalidate(); + } + } public int BufferSize { get; set; } public int CurrIndex { get; private set; } public byte[] Buffer { get; } = new byte[32]; @@ -28,12 +37,8 @@ namespace CodeMatrix CellSize = new Size(25, 25); BufferSize = 7; - CurrIndex = 4; - HoverCode = 0x55; - Buffer[0] = 0xE9; - Buffer[1] = 0x55; - Buffer[2] = 0x1C; - Buffer[3] = 0xBD; + CurrIndex = 0; + HoverCode = 0; } private void InitComponent() @@ -57,34 +62,35 @@ namespace CodeMatrix CellSize.Width-1, CellSize.Height-1); var cellOffsetWidth = CellSize.Width + CellMargin.Horizontal; - int index = 0; - for (; index < CurrIndex; index++) + for (int i = 0; i < CurrIndex && i < BufferSize; i++) { e.Graphics.DrawRectangle(Styles.Default.SelectedCellBorderPen, cellOffset); - var code = Buffer[index].ToString("X2"); + var code = Buffer[i].ToString("X2"); var codeSize = e.Graphics.MeasureString(code, Font); var codeOffset = new PointF((CellSize.Width-codeSize.Width)/2, (CellSize.Height-codeSize.Height)/2); var codePoint = new PointF(codeOffset.X+cellOffset.X, codeOffset.Y+cellOffset.Y); e.Graphics.DrawString(code, Font, Styles.Default.CodeBrush, codePoint); cellOffset.X += cellOffsetWidth; } - if (HoverCode > 0) + + if (CurrIndex < BufferSize) { e.Graphics.DrawRectangle(Styles.Default.SelectCellBorderPen, cellOffset); - var code = HoverCode.ToString("X2"); - var codeSize = e.Graphics.MeasureString(code, Font); - var codeOffset = new PointF((CellSize.Width-codeSize.Width)/2, (CellSize.Height-codeSize.Height)/2); - var codePoint = new PointF(codeOffset.X+cellOffset.X, codeOffset.Y+cellOffset.Y); - e.Graphics.DrawString(code, Font, Styles.Default.SelectBrush, codePoint); - - - cellOffset.X += cellOffsetWidth; - index++; - } - for (; index < BufferSize; index++) - { - e.Graphics.DrawRectangle(Styles.Default.EmptyCellBorderPen, cellOffset); + if (HoverCode > 0) + { + var code = HoverCode.ToString("X2"); + var codeSize = e.Graphics.MeasureString(code, Font); + var codeOffset = new PointF((CellSize.Width-codeSize.Width)/2, (CellSize.Height-codeSize.Height)/2); + var codePoint = new PointF(codeOffset.X+cellOffset.X, codeOffset.Y+cellOffset.Y); + e.Graphics.DrawString(code, Font, Styles.Default.SelectBrush, codePoint); + } cellOffset.X += cellOffsetWidth; + + for (int i = CurrIndex+1; i < BufferSize; i++) + { + e.Graphics.DrawRectangle(Styles.Default.EmptyCellBorderPen, cellOffset); + cellOffset.X += cellOffsetWidth; + } } @@ -92,5 +98,20 @@ namespace CodeMatrix base.OnPaint(e); } + + public void InputCode(byte code) + { + if (CurrIndex < BufferSize) + { + Buffer[CurrIndex++] = code; + HoverCode = 0; + } + } + + public void ClearBuffer() + { + CurrIndex = 0; + HoverCode = 0; + } } }