Я новичок в c # и занимаюсь разработкой программного обеспечения для настольных компьютеров POS (WinForms), и я хотел бы использовать PropertyGridView, чтобы позволить пользователю выбрать принтер и «PaperSize», а затем сохранить эти пользовательские настройки (возможно, сериализациюкласс предпочтений).
У меня в окне есть сетка свойств, а в классе все предпочтения.Прямо сейчас я могу выбрать принтер и получить список размеров бумаги.
Когда я нажимаю на принтер, я получаю размеры бумаги и помещаю их в список.
Мои проблемы:
- Я не знаю, какпоказать только имя PapeSize.
- После выбора PaperSize я получаю сообщение об ошибке («Значение свойства недопустимо») и не знаю, как сохранить / сохранить выбор.
Снимок экрана с сеткой моих свойств с выбором размера бумаги
Вот определение класса настроек и подходящие методы.
[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();
}
}
Будем благодарны за любые предложения.Спасибо заранее.