Выберите PaperSize в PropertyGridView (WinForms) - PullRequest
0 голосов
/ 15 апреля 2019

Я новичок в c # и занимаюсь разработкой программного обеспечения для настольных компьютеров POS (WinForms), и я хотел бы использовать PropertyGridView, чтобы позволить пользователю выбрать принтер и «PaperSize», а затем сохранить эти пользовательские настройки (возможно, сериализациюкласс предпочтений).

У меня в окне есть сетка свойств, а в классе все предпочтения.Прямо сейчас я могу выбрать принтер и получить список размеров бумаги.

Когда я нажимаю на принтер, я получаю размеры бумаги и помещаю их в список.

Мои проблемы:

  1. Я не знаю, какпоказать только имя PapeSize.
  2. После выбора 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();
            }
        }

Будем благодарны за любые предложения.Спасибо заранее.

...