using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using ryPrint.Mod; using ryPrint; namespace RyPrint.Mod { public partial class PrintModEdit : UserControl { public PrintModEdit() { InitializeComponent(); } public bool IsDataChanged = false; #region 添加控件函数 public myLabel AddControl(string name, ClsProperty.En_Type _type) { if (GetControl(name) != null) { MessageBox.Show("该项已经存在", "提醒", MessageBoxButtons.OK, MessageBoxIcon.Information); return null; } else { return AddControl(name, Enum.GetName(typeof(ClsProperty.En_Type), _type), _type, "", ""); } } public myLabel AddControl(string name, string title, ClsProperty.En_Type sType, string format, string value) { return AddControl(name, title, sType, format, value, ""); } public myLabel AddControl(string name, string title, ClsProperty.En_Type sType, string format, string value, string DataSource) { IsDataChanged = true; myLabel ct = new myLabel() { Size = new Size(100, 25), BackColor = Color.Transparent, Text = title, Name = name, Parent = picPreview, Cursor = Cursors.Arrow, Font = new Font("黑体", 10, FontStyle.Regular) }; //ct.MouseDown += new MouseEventHandler(ct_MouseDown); ct.KeyUp += Ct_KeyUp; ct.KeyDown += new KeyEventHandler(Ct_KeyDown); //ct.MouseMove += new MouseEventHandler(ct_MouseMove); //ct.MouseUp += new MouseEventHandler(ct_MouseUp); ct.SizeChanged += new EventHandler(Ct_SizeChanged); ct.Click += new EventHandler(Ct_Click); //ct.sType = sType; //ct.title = title; //ct.format = format; //ct.value = value; ct.Property.DataSource = DataSource; ct.Property.Type = sType; ct.Property.Title = title; ct.Property.CustomFormat = format; ct.Property.Value = value; ct.Property.FontSize = ct.Font.Size; ct.Property.Size = new SizeF(RySet.Pixeltomm(ct.Size.Width), RySet.Pixeltomm(ct.Size.Height)); ct.Property.Postion = new PointF(RySet.Pixeltomm(ct.Location.X), RySet.Pixeltomm(ct.Location.Y)); new DragControl.MoveControl(ct); picPreview.Controls.Add(ct); return ct; } private void Ct_KeyUp(object sender, KeyEventArgs e) { //if (e.KeyCode == Keys.Up) //{ // isDataChanged = true; // myLabel ct = (myLabel)sender; // ct.Top--; //} //else if (e.KeyCode == Keys.Down) //{ // isDataChanged = true; // myLabel ct = (myLabel)sender; // ct.Top++; //} //else if (e.KeyCode == Keys.Left) //{ // isDataChanged = true; // myLabel ct = (myLabel)sender; // ct.Left--; //} //else if (e.KeyCode == Keys.Right) //{ // isDataChanged = true; // myLabel ct = (myLabel)sender; // ct.Left++; //} } void Ct_SizeChanged(object sender, EventArgs e) { IsDataChanged = true; myLabel ct = (myLabel)sender; LoadProperty(ct); } void Ct_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Delete) { IsDataChanged = true; myLabel ct = (myLabel)sender; picPreview.Controls.Remove(ct); propertyGrid1.SelectedObject = null; } } private myLabel GetControl(string name) { foreach (Control ct in picPreview.Controls) { if (ct.Name == name) { if (ct is myLabel) { return (myLabel)ct; } else { return null; } } } return null; } #endregion private void LoadProperty(myLabel ct) { propertyGrid1.SelectedObject = ct.Property; } private void Ct_Click(object sender, EventArgs e) { myLabel ct = (myLabel)sender; LoadProperty(ct); } #region 控件拖放 //private Point position; private void PicPreview_DragEnter(object sender, DragEventArgs e) { //当Button被拖拽到WinForm上时候,鼠标效果出现 if ((e.Data.GetDataPresent(typeof(TextBox))) || (e.Data.GetDataPresent(typeof(myLabel)))) { e.Effect = DragDropEffects.Move; } } #endregion /// /// 重设控件位置 /// /// public string ResetLocationControl() { ryCommon.Storage tStor = new ryCommon.Storage(); foreach (Control ct1 in picPreview.Controls) { switch(ct1) { case myLabel ct: ct.Size = new Size(RySet.MMtopixel(ct.Property.Size.Width), RySet.MMtopixel(ct.Property.Size.Height)); ct.Location = new Point(RySet.MMtopixel(ct.Property.Postion.X), RySet.MMtopixel(ct.Property.Postion.Y)); break; } } return tStor.GetXMLText(); } /// /// 获取或设置配置信息 /// public string Config { get {return SaveControl(); } set { LoadControl(value); } } /// /// 保存布局配置信息到字符串 /// /// public string SaveControl() { ryCommon.Storage tStor = new ryCommon.Storage(); foreach (Control ct1 in picPreview.Controls) { switch (ct1) { case myLabel ct: tStor.AddNode2("Name", ct.Name); tStor.SetAttrValue("Title", ct.Property.Title); tStor.SetAttrValue("Width", RySet.Pixeltomm(ct.Size.Width)); tStor.SetAttrValue("Height", RySet.Pixeltomm(ct.Size.Height)); tStor.SetAttrValue("FontSize", ct.Font.Size); tStor.SetAttrValue("Left", RySet.Pixeltomm(ct.Location.X)); tStor.SetAttrValue("Top", RySet.Pixeltomm(ct.Location.Y)); //tStor.SetAttrValue("Left", ct.Location.X>picExpress.Image.Width?0:ct.Location.X); //tStor.SetAttrValue("Top", ct.Location.Y>picExpress.Image.Height?0:ct.Location.Y); tStor.SetAttrValue("Multiline", ct.Property.Multiline); tStor.SetAttrValue("align", ct.AlignStr); tStor.SetAttrValue("format", ct.Property.CustomFormat); tStor.SetAttrValue("value", ct.Property.Value); tStor.SetAttrValue("sType", (int)ct.Property.Type); tStor.SetAttrValue("LineSpace", ct.Property.LineSpace); tStor.SetAttrValue("PageCount", ct.Property.PageCount); tStor.SetAttrValue("DataSource", ct.Property.DataSource); tStor.SetAttrValue("NoPrint", ct.Property.NoPrint); break; } } ryCommon.Storage tStor_set = new ryCommon.Storage(); tStor_set.SelectNode2("id", "set"); tStor_set.SetAttrValue("Width",numWidth.Value); tStor_set.SetAttrValue("Height", numHeight.Value); tStor_set.SetAttrValue("PreviewPicPath",txtPicPath.Text); tStor_set.SelectNode2("id", "print_xml"); tStor_set.SetAttrValue("Value", tStor.GetXMLText()); return tStor_set.GetXMLText(); } /// /// 保存配置到文件 /// /// 要保存的路径 public void SaveToFile(string path) { if(!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(path))) { System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(path)); } System.IO.File.WriteAllText(path, SaveControl(), Encoding.UTF8); } /// /// 从xml文本中加载配置 /// /// public void LoadControl(string xml) { ryCommon.Storage tStor_set = new ryCommon.Storage(xml); tStor_set.SelectNode2("id", "set"); numWidth.Value = tStor_set.GetAttrValue("Width",0); numHeight.Value = tStor_set.GetAttrValue("Height", 0); txtPicPath.Text = tStor_set.GetAttrValue("PreviewPicPath", ""); tStor_set.SelectNode2("id","print_xml"); ryCommon.Storage tStor = new ryCommon.Storage(tStor_set.GetAttrValue("Value")); System.Xml.XmlNodeList list = tStor.GetList(); for (int i = 0; i < list.Count; i++) { tStor.SelectNode3(list[i]); myLabel ct = new myLabel() { Font = new Font("黑体", tStor.GetAttrValueByInt("FontSize", 10), FontStyle.Regular), Size = new Size(RySet.MMtopixel(tStor.GetAttrValue("Width", 50f)), RySet.MMtopixel(tStor.GetAttrValue("Height", 10f))) }; ct.Property.Multiline = tStor.GetAttrValueByBool("Multiline", false); if (ct.Size.Height == 0) { ct.Height = 21; } if (ct.Size.Width == 0) { ct.Width = 100; } ct.Property.Size = new SizeF((float)tStor.GetAttrValue("Width", 50f), (float)tStor.GetAttrValue("Height", 10f)); ct.Location = new Point(RySet.MMtopixel(tStor.GetAttrValue("Left", 0f)), RySet.MMtopixel(tStor.GetAttrValue("Top", 0f))); ct.Property.Postion = new PointF((float)tStor.GetAttrValue("Left", 0f), (float)tStor.GetAttrValue("Top", 0f)); if (ct.Location.Y < 0) { ct.Top = 0; } if (ct.Location.X < 0) { ct.Left = 0; } //ct.Size = new Size(tStor.GetAttrValue("Width", 50), tStor.GetAttrValue("Height", 10)); //if (ct.Size.Height == 0) { ct.Height = 21; } //if (ct.Size.Width == 0) { ct.Width = 100; } //ct.Property.Size = new SizeF((float)pixelTomm_Width(tStor.GetAttrValue("Width", 50)), (float)pixelTomm_Height(tStor.GetAttrValue("Height", 10))); ////ct.Location = new Point((int)pixelTomm_Width(tStor.GetAttrValue("Left", 0)), (int)pixelTomm_Height(tStor.GetAttrValue("Top", 0))); //ct.Property.Postion = new PointF((float)pixelTomm_Width(tStor.GetAttrValue("Left", 0)), (float)pixelTomm_Height(tStor.GetAttrValue("Top", 0))); //ct.Size = new Size(tStor.GetAttrValue("Width", 50),tStor.GetAttrValue("Height", 10)); //ct.Location = new Point(tStor.GetAttrValue("Left", 0),tStor.GetAttrValue("Top", 0)); // ClsProperty.En_Type _type = ClsProperty.En_Type.自定义; try { _type = (ClsProperty.En_Type)tStor.GetAttrValue("sType", 0); } catch { } ct.Property.Type = _type; ct.Property.Title = tStor.GetAttrValue("Title"); ct.Property.LineSpace = tStor.GetAttrValue("LineSpace", 0d); ct.Property.PageCount = tStor.GetAttrValue("PageCount", 0); ct.Name = tStor.GetAttrValue("Name"); ct.Parent = picPreview; //ct.ReadOnly = true; ct.BackColor = Color.Transparent; ct.Cursor = Cursors.Arrow; ct.SetAlign(tStor.GetAttrValue("align")); ct.Property.Value = tStor.GetAttrValue("value"); ct.Property.CustomFormat = tStor.GetAttrValue("format"); ct.Property.DataSource = tStor.GetAttrValue("DataSource"); ct.Property.NoPrint = tStor.GetAttrValue("NoPrint", false); ct.Property.Type = _type; ct.Refresh(); //ct.MouseDown += new MouseEventHandler(ct_MouseDown); //ct.MouseMove += new MouseEventHandler(ct_MouseMove); //ct.MouseUp += new MouseEventHandler(ct_MouseUp); new DragControl.MoveControl(ct); ct.Click += new EventHandler(Ct_Click); ct.KeyUp += Ct_KeyUp; ct.KeyDown += new KeyEventHandler(Ct_KeyDown); ct.SizeChanged += new EventHandler(Ct_SizeChanged); picPreview.Controls.Add(ct); } } /// /// 从文件中加载配置。 /// /// /// public int LoadFromFile(string path) { if(System.IO.File.Exists(path)) { LoadControl(System.IO.File.ReadAllText(path, ryCommon.TxtFileEncoder.GetEncoding(path))); return 1; } return 0; } private void PropertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) { IsDataChanged = true; ClsProperty item = (ClsProperty)propertyGrid1.SelectedObject; myLabel ct = GetControl(item.Name); if (ct != null) { ct.Property = item; ct.Refresh(); } } private void BtnBrowser_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == DialogResult.OK) { txtPicPath.Text = openFileDialog1.FileName.Replace(Application.StartupPath, ""); } } private void txtPicPath_TextChanged(object sender, EventArgs e) { string picPath = RySet.GetTruePath(txtPicPath.Text); if (System.IO.File.Exists(picPath)) { Image image = Image.FromFile(picPath); picPreview.Image = image; numWidth.Value = Convert.ToDecimal(RySet.InchesTomm(image.Width / Convert.ToDecimal(image.HorizontalResolution))); numHeight.Value = Convert.ToDecimal(RySet.InchesTomm(image.Height / Convert.ToDecimal(image.VerticalResolution))); picPreview.Width = RySet.MMtopixel((float)numWidth.Value); picPreview.Height = RySet.MMtopixel((float)numHeight.Value); ResetLocationControl(); //picExpress. } else { picPreview.Image = null; } } /// /// 获取新的控件名 /// /// private string GetNewName() { int i = 1; while (true) { if (GetControl("custom" + i.ToString()) == null) { return "custom" + i.ToString(); } i++; } } private void 添加自定义ToolStripMenuItem_Click(object sender, EventArgs e) { string name = GetNewName(); AddControl(name, "自定义" + name.Replace("custom", ""), ClsProperty.En_Type.自定义, "", ""); } private void 添加数据库字段ToolStripMenuItem_Click(object sender, EventArgs e) { string name = GetNewName(); AddControl(name, "数据字段" + name.Replace("custom", ""), ClsProperty.En_Type.数据字段, "", ""); } private void BtnAddLabel_Click(object sender, EventArgs e) { Button ct = (Button)sender; Point p = new Point(0, ct.Height); contextMenuStrip1.Show(ct, p); } } }