我是C#的新手,我正在开发POS软件桌面应用程序(WinForms),并且我想使用PropertyGridView来让用户选择打印机和“ PaperSize”,然后保存这些用户首选项(可能是序列化偏好类别)。
我在一个窗口中有属性网格,在一个类中有所有首选项。现在,我可以选择打印机并提供纸张尺寸列表。
当我单击打印机时,会得到纸张尺寸并将它们放在列表中。
我的问题是:
Screen shot of my property grid selecting the paper size
这是首选项类定义和相关方法。
[Browsable(false)]
public static List<string> lstImpresoras;
[Browsable(false)]
public static List<PaperSize> lstPapel = new List<PaperSize>();
// -- other properties here...
[ReadOnly(false)]
[Category("Impresoras")]
[DisplayName("Impresora de Tickets")]
[Description("Nombre de la impresora que se usará en esta terminal para imprimir los tickets de venta")]
[TypeConverter(typeof(MiConvertidorDeImpresoras))]
public string printerTicketsName { get; set; }
// -- more properties here...
public class MiConvertidorDeImpresoras : TypeConverter
{
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
//string[] nations = { "Impresora 1", "Impresora 2", "Impresora 3" };
//return new StandardValuesCollection(nations);
return new StandardValuesCollection(lstImpresoras);
}
}
public class MiConvertidorDePapel : TypeConverter
{
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
return new StandardValuesCollection(lstPapel);
}
}
private void getPrinters()
{
lstImpresoras = new List<string>();
foreach (string impresora in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
lstImpresoras.Add(impresora);
}
}
public void getPaperSizes()
{
PrintDocument pd = new PrintDocument();
pd.PrinterSettings.PrinterName = printerTicketsName;
lstPapel.Clear();
PaperSize pkSize;
for (int i = 0; i < pd.PrinterSettings.PaperSizes.Count; i++)
{
pkSize = pd.PrinterSettings.PaperSizes[i];
lstPapel.Add(pkSize);
}
}
在托管属性网格的窗口中……
public WPreferencias()
{
InitializeComponent();
propertyGrid1.SelectedObject = preferencias;
propertyGrid1.PropertyValueChanged += PropertyGrid1_PropertyValueChanged;
}
private void PropertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
{
if (e.ChangedItem.Label == "Impresora de Tickets")
{
preferencias.getPaperSizes();
propertyGrid1.Refresh();
}
}
任何建议将不胜感激。 谢谢你。