using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System.Collections; using Io.Github.Kerwinxu.LibShapes.Core; using Io.Github.Kerwinxu.LibShapes.Utils; using Io.Github.Kerwinxu.LibShapes.Core.Print; using System.Drawing.Printing; namespace BarcodeTerminator { public partial class FrmBarcodeEdit : Form { #region 如下几个是私有变量 /// /// 表格信息 /// private DataTable CurrentDataTable; /// /// 表格信息的下标 /// private int index=-1; /// /// 文件名称 /// private string modelfileName; /// /// 取得文件名称 /// /// public string getModelFileName() { return this.modelfileName; } #endregion /// /// 导入模板文档 /// /// public FrmBarcodeEdit(string modelFileName):this() { loadModelFile(modelFileName); } /// /// 可以导入模板文档以及excel数据 /// /// /// public FrmBarcodeEdit(string modelFileName, DataTable dt) : this(modelFileName) { this.CurrentDataTable = dt; } public FrmBarcodeEdit(DataTable dt) : this() { this.CurrentDataTable = dt; loadDatatable(); } public FrmBarcodeEdit() { InitializeComponent(); // 界面上的初始化放在这里。 canvasResize(); toolboxResize(); // 画布和工具箱之间是有关联的 this.toolBox.canvas = this.canvas; this.canvas.objectSelected += this.toolBox.objectSelected; // 选择更改事件 this.canvas.stateChanged += this.toolBox.stateChanged; // 状态更改事件 this.toolBox.PropertyValueChanged += this.canvas.propertyValueChanged; // 属性更改事件 // init_printers(); // 加载打印机 } /// /// 画布的自动更改尺寸 /// private void canvasResize() { int _spacing = 5; this.canvas.Location = new Point(_spacing, _spacing); this.canvas.Width = this.splitContainer2.Panel1.Width - 2 * _spacing; this.canvas.Height = this.splitContainer2.Panel1.Height - 2 * _spacing; } private void init_printers() { // 加载打印机的 foreach (var item in PrinterSettings.InstalledPrinters) { combo_printers.Items.Add(item); } // 这里有一个默认的打印机 var doc = new PrintDocument(); combo_printers.Text = doc.DefaultPageSettings.PrinterSettings.PrinterName; } /// /// 工具箱的自动更改尺寸。 /// private void toolboxResize() { int _spacing = 5; this.toolBox.Location = new Point(_spacing, _spacing); this.toolBox.Width = this.splitContainer2.Panel2.Width - 2 * _spacing; this.toolBox.Height = this.splitContainer2.Panel2.Height - 2 * _spacing; } private void splitContainer2_Panel1_Resize(object sender, EventArgs e) { canvasResize(); } private void splitContainer2_Panel2_SizeChanged(object sender, EventArgs e) { toolboxResize(); } private void 新建NToolStripMenuItem_Click(object sender, EventArgs e) { newFile(); } private void 打开OToolStripMenuItem_Click(object sender, EventArgs e) { loadModelFile(); } private void 保存SToolStripMenuItem_Click(object sender, EventArgs e) { saveModelFile(); } private void 另存为AToolStripMenuItem_Click(object sender, EventArgs e) { saveAsModelFile(); } private void 导入EXCEL表格ToolStripMenuItem_Click(object sender, EventArgs e) { loadexcel(); } private void 退出XToolStripMenuItem_Click(object sender, EventArgs e) { myExit(); } private void 撤消UToolStripMenuItem_Click(object sender, EventArgs e) { this.canvas.undo(); } private void 重复RToolStripMenuItem_Click(object sender, EventArgs e) { this.canvas.redo(); } private void 剪切TToolStripMenuItem_Click(object sender, EventArgs e) { this.canvas.cut(); } private void 复制CToolStripMenuItem_Click(object sender, EventArgs e) { this.canvas.copy(); } private void 粘贴PToolStripMenuItem_Click(object sender, EventArgs e) { this.canvas.paste(); } private void 全选AToolStripMenuItem_Click(object sender, EventArgs e) { this.canvas.selectAll(); } private void 删除DToolStripMenuItem_Click(object sender, EventArgs e) { this.canvas.deleteShapes(); } private void 讲ToolStripMenuItem_Click(object sender, EventArgs e) { this.canvas.zoomToScreen(); } private void 向前一层ToolStripMenuItem_Click(object sender, EventArgs e) { this.canvas.forward(); } private void 向后一层ToolStripMenuItem_Click(object sender, EventArgs e) { this.canvas.backward(); } private void 移到最前ToolStripMenuItem_Click(object sender, EventArgs e) { this.canvas.forwardToFront(); } private void 移到最后ToolStripMenuItem_Click(object sender, EventArgs e) { this.canvas.backwardToEnd(); } private void 分组ToolStripMenuItem_Click(object sender, EventArgs e) { this.canvas.mergeGroup(); } private void 解除分组ToolStripMenuItem_Click(object sender, EventArgs e) { this.canvas.cancelGroup(); } private void 关于AToolStripMenuItem_Click(object sender, EventArgs e) { FrmHelp frmHelp = new FrmHelp(); frmHelp.ShowDialog(); } private void 新建NToolStripButton_Click(object sender, EventArgs e) { newFile(); } private void 打开OToolStripButton_Click(object sender, EventArgs e) { loadModelFile(); } private void 保存SToolStripButton_Click(object sender, EventArgs e) { saveModelFile(); } private void 剪切UToolStripButton_Click(object sender, EventArgs e) { this.canvas.cut(); } private void 复制CToolStripButton_Click(object sender, EventArgs e) { this.canvas.copy(); } private void 粘贴PToolStripButton_Click(object sender, EventArgs e) { this.canvas.paste(); } private void 导入EXCEL_Click(object sender, EventArgs e) { loadexcel(); } private void bindingNavigatorMovePreviousItem_Click(object sender, EventArgs e) { if (CurrentDataTable != null && CurrentDataTable.Rows.Count > 0) index -=1; updateBinding(); } private void bindingNavigatorMoveFirstItem_Click(object sender, EventArgs e) { if (CurrentDataTable != null && CurrentDataTable.Rows.Count > 0) index = 0; updateBinding(); } private void bindingNavigatorMoveNextItem_Click(object sender, EventArgs e) { if (CurrentDataTable != null && index < CurrentDataTable.Rows.Count-1) index += 1; updateBinding(); } private void bindingNavigatorMoveLastItem_Click(object sender, EventArgs e) { if (CurrentDataTable != null && index < CurrentDataTable.Rows.Count - 1) index = CurrentDataTable.Rows.Count - 1; updateBinding(); } private void btnTestPrint_Click(object sender, EventArgs e) { printShapes(1); } private void btnPrint2_Click(object sender, EventArgs e) { int num1 = 0; if (!int.TryParse(txtQtyOfWantToPrinted.Text, out num1)) { MessageBox.Show("打印数量转换失败"); return; } if (num1 == 0) MessageBox.Show("打印数量为0"); float num2 = 0; if (!float.TryParse(txtSunHao.Text, out num2)){ MessageBox.Show("损耗比例转换失败");return; } if (num2 > 0) num1 = (int)(num1 * (1 + num2)); printShapes(num1); } private void btnPrint_Click(object sender, EventArgs e) { int num = 0; if (!int.TryParse(txtCurrentPrintPage.Text, out num)) { MessageBox.Show("打印数量转换失败"); return; } if (num == 0) MessageBox.Show("打印数量为0"); printShapes(num); } /// /// 加载模型文件 /// private void loadModelFile() { openFileDialog1.Filter = "模板文件|*.json"; if (openFileDialog1.ShowDialog() == DialogResult.OK) { loadModelFile(openFileDialog1.FileName); } } private void loadModelFile(string modelFileName) { this.modelfileName = modelFileName; // 然后读取这个文件 var shapes = Shapes.load(modelFileName); // 然后更改画布的 this.canvas.shapes = shapes; this.canvas.Refresh(); } private void saveModelFile(string modelFileName) { if (this.canvas.shapes != null) { canvas.shapes.save(modelFileName); } } private void saveModelFile() { // 这里判断一下是否有名字 if (string.IsNullOrEmpty(this.modelfileName)) { saveFileDialog1.AddExtension = true; saveFileDialog1.DefaultExt = ".json"; saveFileDialog1.Filter = "模板文件|*.json"; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { this.modelfileName = saveFileDialog1.FileName; } } saveModelFile(this.modelfileName); } /// /// 新建一个文档 /// private void newFile() { //清空数据 this.modelfileName = null; this.CurrentDataTable = null; this.index = -1; this.canvas.shapes = new Shapes(); } private string [] getColumnNames (DataTable dt) { List columnNameList = new List(); foreach (DataColumn col in dt.Columns) { columnNameList.Add(col.ColumnName);//获取到DataColumn列对象的列名 } return columnNameList.ToArray(); } private void loadDatatable() { // 然后这里默认是第一行。 index = 0; bindingNavigatorCountItem.Text = $"/ {CurrentDataTable.Rows.Count}"; updateBinding(); // 这里设置有什么打印的变量。 var var_names = getColumnNames(CurrentDataTable); comboBoxQtyOfWantToPrinted.Items.Clear(); comboBoxQtyOfWantToPrinted.Items.AddRange(var_names); } private void loadexcel() { // 读取excel表格 openFileDialog1.Filter = "excel文件|*.xls;*.xlsx"; if (openFileDialog1.ShowDialog() == DialogResult.OK) { CurrentDataTable = ExcelData.LoadExcel(openFileDialog1.FileName); loadDatatable(); } } /// /// 取得 /// /// /// private Dictionary getDict(int i) { var _data = CurrentDataTable.Rows[i]; // 然后将这个组成字典形式 Dictionary dict = new Dictionary(); foreach (DataColumn item in CurrentDataTable.Columns) { dict[item.ColumnName] = _data[item.ColumnName].ToString(); } return dict; } private void updateBinding() { if (index >= 0) { // 取得变量 var dict = getDict(index); // 设置变量 this.canvas.setVars(dict); // 更新打印的数量 if (dict.ContainsKey(comboBoxQtyOfWantToPrinted.Text)) { txtQtyOfWantToPrinted.Text = dict[comboBoxQtyOfWantToPrinted.Text]; } } // 更新几个状态 if (index < 0 ) { bindingNavigatorPositionItem.Text = "0"; bindingNavigatorCountItem.Text = "0"; } else { bindingNavigatorPositionItem.Text = (index + 1).ToString() ; } bindingNavigatorMoveFirstItem.Enabled = index > 0; bindingNavigatorMovePreviousItem.Enabled = index > 0; if (CurrentDataTable != null) { bindingNavigatorMoveNextItem.Enabled = index < CurrentDataTable.Rows.Count - 1; bindingNavigatorMoveLastItem.Enabled = index < CurrentDataTable.Rows.Count - 1; } else { bindingNavigatorMoveNextItem.Enabled = false; bindingNavigatorMoveLastItem.Enabled = false; } } private void 帮助LToolStripButton_Click(object sender, EventArgs e) { FrmHelp frmHelp = new FrmHelp(); frmHelp.ShowDialog(); } /// /// 打印。 /// /// private void printShapes(int num) { PrintItem printItem = new PrintItem(); if (index < 0 ) { printItem.Valss.Add(new Dictionary()); // 空白的变量 } else { // 首先构造变量 var dict = getDict(index); printItem.Valss.Add(dict); } // 然后构造数量 printItem.PrintCounts.Add(1); // 充满打印 printItem.isFullPrint = chkIsFull.Checked; printItem.Shapes = this.canvas.shapes; printItem.PrinterName = combo_printers.Text; // 添加到 PrintManagerImpl printManagerImpl = new PrintManagerImpl(); printManagerImpl.addPrintItem(printItem); } private void myExit() { // 不管怎么样,只要有图形,就有保存或者另存为 if (this.canvas.shapes.lstShapes.Count > 0 && MessageBox.Show("需要保存文件吗?") == DialogResult.OK) { saveModelFile(); } } /// /// 另存为。 /// private void saveAsModelFile() { saveFileDialog1.AddExtension = true; saveFileDialog1.DefaultExt = ".json"; saveFileDialog1.Filter = "模板文件|*.json"; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { this.modelfileName = saveFileDialog1.FileName; } saveModelFile(this.modelfileName); } private void comboBoxQtyOfWantToPrinted_SelectedIndexChanged(object sender, EventArgs e) { // 这里需要判断是否有这个变量 if (index >= 0) { var dict = getDict(index); // 如果有这个 if (dict.ContainsKey(comboBoxQtyOfWantToPrinted.Text)) { txtQtyOfWantToPrinted.Text = dict[comboBoxQtyOfWantToPrinted.Text]; } else { txtQtyOfWantToPrinted.Text = string.Empty; } } else { txtQtyOfWantToPrinted.Text = string.Empty; } } } }