using System; using System.ComponentModel; using System.Data; using System.Drawing.Printing; namespace Dongke.WinForm.Controls.InvoiceLayout { internal partial class PaperAreaSetting : Setting { #region 成员变量 private static DataTable _paperSizes; // 纸张尺寸一览 private bool _isSizeChanged = false; private bool _allowChangeSize = false; private int _indexA4 = -1; #endregion 成员变量 #region 属性 /// /// 纸张的宽(mm) /// [DefaultValue(210)] public float PaperWidth { get { return System.Convert.ToSingle(numerWidth.Value); } set { decimal d = System.Convert.ToDecimal(value); if (d < numerWidth.Minimum) { d = numerWidth.Minimum; } else if (numerWidth.Maximum < d) { d = numerWidth.Maximum; } if (numerWidth.Value != d) { _isSizeChanged = true; numerWidth.Value = d; } } } /// /// 纸张的高(mm) /// [DefaultValue(297)] public float PaperHeight { get { return System.Convert.ToSingle(numerHeight.Value); } set { decimal d = System.Convert.ToDecimal(value); if (d < numerHeight.Minimum) { d = numerHeight.Minimum; } else if (numerHeight.Maximum < d) { d = numerHeight.Maximum; } if (numerHeight.Value != d) { _isSizeChanged = true; numerHeight.Value = d; } } } #endregion 属性 #region 构造函数 /// /// 构造函数 /// public PaperAreaSetting() { InitializeComponent(); dgrdPaperSize.AutoGenerateColumns = false; InitializePaperSize(); } #endregion 构造函数 #region 函数 /// /// 纸张尺寸一览 /// private void InitializePaperSize() { if (_paperSizes == null) { _paperSizes = new DataTable(); _paperSizes.TableName = "PaperSizes"; _paperSizes.Columns.Add("SizeName", typeof(string)); _paperSizes.Columns.Add("Width", typeof(float)); _paperSizes.Columns.Add("Height", typeof(float)); } else { _paperSizes.Clear(); } float height = 0; float width = 0; int index = 0; PrintDocument pd = new PrintDocument(); foreach (PaperSize ps in pd.PrinterSettings.PaperSizes) { DataRow dr = _paperSizes.NewRow(); height = LayoutCommon.Inch100ToMillimeter(ps.Height); width = LayoutCommon.Inch100ToMillimeter(ps.Width); dr[0] = string.Format("{0} {1:0}mm×{2:0}mm", ps.PaperName, width, height); dr[1] = Math.Round(width); dr[2] = Math.Round(height); _paperSizes.Rows.Add(dr); if (ps.PaperName.StartsWith("A4") && 210.0f.Equals(dr[1]) && 297.0f.Equals(dr[2]) && _indexA4 < 0) { _indexA4 = index; } index++; } dgrdPaperSize.DataSource = _paperSizes; } #endregion 函数 #region 事件处理 /// /// shown /// /// 指定的对象 /// 提供的事件数据 private void PaperAreaSetting_Shown(object sender, EventArgs e) { // 新建时选择A4纸张 if (_isSizeChanged || _indexA4 < 0) { dgrdPaperSize.ClearSelection(); } else { dgrdPaperSize.Focus(); dgrdPaperSize.Rows[_indexA4].Selected = true; dgrdPaperSize.CurrentCell = dgrdPaperSize.Rows[_indexA4].Cells[0]; } _allowChangeSize = true; } /// /// 【纸张尺寸一览】选择 /// /// 指定的对象 /// 提供的事件数据 private void dgrdPaperSize_Leave(object sender, EventArgs e) { dgrdPaperSize.ClearSelection(); } /// /// 【纸张尺寸一览】选择 /// /// 指定的对象 /// 提供的事件数据 private void dgrdPaperSize_SelectionChanged(object sender, EventArgs e) { if (dgrdPaperSize.CurrentRow != null && _allowChangeSize && 0 < dgrdPaperSize.SelectedRows.Count) { PaperHeight = System.Convert.ToSingle(dgrdPaperSize.CurrentRow.Cells["colHeight"].Value); PaperWidth = System.Convert.ToSingle(dgrdPaperSize.CurrentRow.Cells["colWidth"].Value); } } #endregion 事件处理 } }