private void cbInsertLine_SelectedIndexChanged(object sender, EventArgs e) { if (!PagerSetting.IsPagerLayerCreated) { MessageBox.Show("请先设置纸张尺寸!"); return; } int m_LineDirect = 0;//线条方向 1 横线 2 竖线 if (cbInsertLine.SelectedItem.ToString() == "插入横线") { m_LineDirect = 1; } else if (cbInsertLine.SelectedItem.ToString() == "插入竖线") { m_LineDirect = 2; } LineLayer ll = new LineLayer(int.Parse(tbLineWidth.Text), int.Parse(tbLinelength.Text), m_LineDirect); panel1.Controls.Add(ll); ll.BringToFront();//一定要加这句将层放到最上面,不然默认是放在最下面的 ll.Left = m_startX + 30; ll.Top = m_startY + 50; }
/// <summary> /// 保存配置 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSaveConfig_Click(object sender, EventArgs e) { if (panel1.Controls.Count < 2) { MessageBox.Show("没有可保存的内容,请设计好模板后再保存配置!"); return; } PrintConfig pcongif = new PrintConfig(); pcongif.PageHeight = PagerSetting.PageHeight; pcongif.PageWidth = PagerSetting.PageWidth; pcongif.PagePadding = PagerSetting.PagePadding; List <object> layerConfigs = new List <object>(); //先得到纸张属性 int pageX = 0; int pageY = 0; if (((ImageLayerBase)panel1.Controls[panel1.Controls.Count - 1]).layerType == LayerType.Paper) { pageX = panel1.Controls[panel1.Controls.Count - 1].Left; pageY = panel1.Controls[panel1.Controls.Count - 1].Top; } for (int i = 0; i < panel1.Controls.Count; i++) { LayerType lt = ((ImageLayerBase)panel1.Controls[i]).layerType; switch (lt) { case LayerType.BarCode: BarCodeLayer blayer = (BarCodeLayer)panel1.Controls[i]; BarCodeLayerConfig bc = new BarCodeLayerConfig(); bc.X = blayer.Left - pageX; bc.Y = blayer.Top - pageY; bc.Width = blayer.Width; bc.Height = blayer.Height; bc.Content = blayer.VarContent; bc.CodeType = blayer.CodeType; bc.IsShowText = blayer.IsShowText; layerConfigs.Add(bc); break; case LayerType.Image: ImageLayer imglayer = (ImageLayer)panel1.Controls[i]; ImageLayerConfig imglc = new ImageLayerConfig(); imglc.X = imglayer.Left - pageX; imglc.Y = imglayer.Top - pageY; imglc.Width = imglayer.Width; imglc.Height = imglayer.Height; imglc.ImageFilePath = imglayer.ImagePath; layerConfigs.Add(imglc); break; case LayerType.Text: TextLayer tl = (TextLayer)panel1.Controls[i]; TextLayerConfig tlc = new TextLayerConfig(); tlc.X = tl.Left - pageX; tlc.Y = tl.Top - pageY; tlc.Content = tl.VarContent; tlc.ContentColor = tl.ForeColor; tlc.ContentFont = tl.Font; layerConfigs.Add(tlc); break; case LayerType.Line: LineLayer ll = (LineLayer)panel1.Controls[i]; LineLayerConfig lc = new LineLayerConfig(); lc.X = ll.Left - pageX; lc.Y = ll.Top - pageY; lc.lineWidth = ll.lineWidth; lc.lineLength = ll.lineLength; lc.lineDirect = ll.lineDirect; layerConfigs.Add(lc); break; default: break; } } pcongif.Layers = layerConfigs; if (SerializeHelper.Serialize(typeof(PrintConfig), pcongif)) { m_printConfig = pcongif; MessageBox.Show("保存成功!"); } else { MessageBox.Show("保存失败!"); } }
/// <summary> /// 从配置还原到控件 /// </summary> /// <param name="cfg"></param> /// <param name="parentCtl"></param> public static void ReturnContrl(PrintConfig cfg, Control parentCtl) { if (cfg == null || cfg.Layers == null || cfg.Layers.Count == 0) { return; } parentCtl.Controls.Clear(); PagerSetting.PageHeight = cfg.PageHeight; PagerSetting.PageWidth = cfg.PageWidth; PagerSetting.PagePadding = cfg.PagePadding; //根据配置还原图 PageLayer pl = new PageLayer(PagerSetting.PageWidth, PagerSetting.PageHeight, PagerSetting.PagePadding); parentCtl.Controls.Add(pl); //计算控件起始坐标 int startX = (int)((parentCtl.Width - PagerSetting.PageWidth) / 2); int startY = (int)((parentCtl.Height - PagerSetting.PageHeight) / 2); pl.Left = startX; pl.Top = startY; for (int i = cfg.Layers.Count - 1; i >= 0; i--) { string layertype = cfg.Layers[i].GetType().ToString(); switch (layertype.Substring(layertype.LastIndexOf(".") + 1)) { case "BarCodeLayerConfig": BarCodeLayerConfig bc = (BarCodeLayerConfig)cfg.Layers[i]; BarCodeLayer barlayer = new BarCodeLayer(bc.Content, bc.Width, bc.Height, bc.CodeType, bc.IsShowText); parentCtl.Controls.Add(barlayer); barlayer.BringToFront(); //一定要加这句将层放到最上面 不然默认是放在最下面的 barlayer.Left = bc.X + startX; barlayer.Top = bc.Y + startY; break; case "ImageLayerConfig": ImageLayerConfig imglc = (ImageLayerConfig)cfg.Layers[i]; ImageLayer imglayer = new ImageLayer(imglc.ImageFilePath, imglc.Width, imglc.Height); parentCtl.Controls.Add(imglayer); imglayer.BringToFront(); //一定要加这句将层放到最上面 不然默认是放在最下面的 imglayer.Left = imglc.X + startX; imglayer.Top = imglc.Y + startY; break; case "TextLayerConfig": TextLayerConfig tlc = (TextLayerConfig)cfg.Layers[i]; TextLayer tl = new TextLayer(tlc.Content, true, tlc.ContentFont, tlc.ContentColor); parentCtl.Controls.Add(tl); tl.BringToFront(); //一定要加这句将层放到最上面 不然默认是放在最下面的 tl.Left = tlc.X + startX; tl.Top = tlc.Y + startY; break; case "LineLayerConfig": LineLayerConfig lc = (LineLayerConfig)cfg.Layers[i]; LineLayer ll = new LineLayer(lc.lineWidth, lc.lineLength, lc.lineDirect); parentCtl.Controls.Add(ll); ll.BringToFront(); //一定要加这句将层放到最上面 不然默认是放在最下面的 ll.Left = lc.X + startX; ll.Top = lc.Y + startY; break; default: break; } } }