コード例 #1
0
        //  Crea, inizializza e aggiunge al Target.TableLayoutPanel nell’ordine: una Label e una TextBox.
        private void AddRow(EditingProperty editingProperty)
        {
            //  Per inizializzare la Label:
            //    assegnare alla proprietà Text il valore della proprietà Label di editableAttribute;
            //    assegnare alla proprietà AutoSize il valore true, in modo che il testo venga visualizzato correttamente.
            //  Per inizializzare la TextBox:
            //    dimensionare il controllo in modo che
            //      la larghezza sia pari al valore della proprietà Width di editableAttribute e
            //      l’altezza sia pari al valore della proprietà PreferredHeight del controllo stesso;
            //    se la editingProperty è read-only,
            //      disabilitare la TextBox (utilizzare la proprietà Enabled);
            //    assegnare alla proprietà Tag il valore di editingProperty;
            //    infine, collegare all’evento Validating della TextBox il gestore ValidatingHandler.

            Label label = new Label();

            label.Text     = editingProperty.Label;
            label.AutoSize = true;
            Target.TableLayoutPanel.Controls.Add(label);

            Control tb = null;

            if (editingProperty.Mode == "Combo")
            {
                tb = new ComboBox();
                if (editingProperty.Label.StartsWith("Tipo"))
                {
                    Type categoria = typeof(Elemento).GetSubtypes().Where(t => t.Name.ToUpper() == editingProperty.Label.Substring(4).ToUpper()).First();
                    ((ComboBox)tb).Items.AddRange(Negozio.GetInstance().GetTipiPerCategoria(categoria).ToArray());
                    ((ComboBox)tb).SelectedItem = ((ComboBox)tb).Items.OfType <TipoElemento>().First();
                }
                else if (editingProperty.Label.StartsWith("Stato"))
                {
                    ((ComboBox)tb).Items.AddRange(Negozio.GetInstance().StatiElemento.ToArray());
                    ((ComboBox)tb).SelectedItem = ((ComboBox)tb).Items.OfType <StatoElemento>().First();
                }
            }
            else
            {
                tb        = new TextBox();
                tb.Height = ((TextBox)tb).PreferredHeight;
            }

            tb.Width       = editingProperty.Width;
            tb.Enabled     = checkIfEnabled(editingProperty);
            tb.Tag         = editingProperty;
            tb.Validating += ValidatingHandler;
            Target.TableLayoutPanel.Controls.Add(tb);
        }
コード例 #2
0
        //  Inserisce nelle TextBox i valori delle corrispondenti proprietà dell'editingObject.
        private void RefreshControls(Control excludedBox)
        {
            //  Per ogni textBox contenuta in Target.TableLayoutPanel, ad esclusione di excludedTextBox:
            //	  recuperare la editingProperty precedentemente salvata nella proprietà Tag di textBox;
            //    assegnare alla proprietà Text di textBox il valore corrente dell'editingProperty come stringa di caratteri;
            //	  infine, se la editingProperty è writable, invocare il metodo Validate passando come argomento textBox.

            foreach (Control tb in Target.TableLayoutPanel.Controls)
            {
                if ((tb.GetType().Equals(typeof(TextBox)) || tb.GetType().Equals(typeof(ComboBox))) && !Equals(excludedBox, tb))
                {
                    EditingProperty ep = (EditingProperty)tb.Tag;
                    tb.Text = ep.ConvertToString();
                    tb.Select(); //trick per avere red al load senza usare il metodo Validate ed ottenere ciò che volevamo
                    //ho tolto il blink da View.EditingControl perchè uccide
                }
            }
            Target.TableLayoutPanel.Select(); //celo il trucco
        }
コード例 #3
0
        //  Esegue la validazione vera e propria del dato contenuto nella textBox passata come argomento.
        private void Validate(Control box)
        {
            //  Recuperare la editingProperty dalla textBox.
            //  Invocare in modo opportuno i metodi TryConvertFromString e TrySetValue dell'editingProperty.
            //  Infine, aggiornare l'ErrorProvider per segnalare all'utente che la textBox è con o senza errori.

            object          value;
            EditingProperty ep = (EditingProperty)box.Tag;

            if (box.GetType() == typeof(TextBox) && ep.TryConvertFromString(box.Text, out value))
            {
                ep.TrySetValue(value);
            }
            else if (box.GetType() == typeof(ComboBox) && ep.TryConvertFromComboItem(((ComboBox)box).SelectedItem, out value))
            {
                ep.TrySetValue(value);
            }

            Target.ErrorProvider.SetError(box, ep.Message);
        }
コード例 #4
0
ファイル: EditingDocument.cs プロジェクト: ellerre/GoodBikes
        //  Memorizza in _editingProperties tutte le proprietà editable
        private void InitializeEditingProperties()
        {
            //	Per ogni proprietà pubblica di EditingObject alla quale è stato associato l’attributo Editable:
            //  se la proprietà è write-only, sollevare un’eccezione;
            //  creare una nuova EditingProperty sulla proprietà e aggiungerla alla collezione _editingProperties;
            //  visualizzare nella finestra di output del debugger la descrizione completa dell'EditingProperty
            //  ad esempio: "Add EditingProperty Titolo  {Label = Titolo, Width = 100} OriginalValue = TitoloLibro_1"

            Type t = EditingObject.GetType();

            foreach (PropertyInfo p in t.GetProperties())
            {
                if ((p.GetCustomAttributes(typeof(Model.EditableAttribute), false).Length > 0))
                {
                    if (p.CanWrite && !p.CanRead)
                    {
                        throw new ArgumentException("public editable property can not be write only");
                    }
                    EditingProperty ep = new EditingProperty(p, (Model.EditableAttribute)p.GetCustomAttributes(typeof(Model.EditableAttribute), false)[0], EditingObject);
                    _editingProperties.Add(ep);
                    Console.WriteLine(ep.ToString());
                }
            }
        }
コード例 #5
0
 private bool checkIfEnabled(EditingProperty editingProperty)
 {
     return(editingProperty.CanWrite && (!editingProperty.NotEditableAfterFirstTime || (editingProperty.NotEditableAfterFirstTime && _firstEdit)));
 }