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 事件处理
}
}