Esempio n. 1
0
        /// <summary>
        /// Применить к объекту сделанные изменения на контроле.
        /// Если не все данные удовлетворяют формату ввода (например при вводе чисел), свойства объекта не изменяются, возвращается false
        /// Вызов base.ApplyChanges() обязателен
        /// </summary>
        /// <returns></returns>
        protected virtual void ApplyChanges()
        {
            foreach (Control control in flowLayoutPanel1.Controls)
            {
                if (control is TextBox)
                {
                    PropertyInfo propertyInfo = control.Tag as PropertyInfo;
                    if (propertyInfo == null)
                    {
                        continue;
                    }

                    if (propertyInfo.PropertyType.Name.ToLower() != "string")
                    {
                        continue;
                    }

                    string val        = (string)propertyInfo.GetValue(_typeToImport, null);
                    string controlVal = control.Text;
                    if (val != controlVal)
                    {
                        propertyInfo.SetValue(_typeToImport, controlVal, null);
                    }
                }
                if (control is RichTextBox)
                {
                    PropertyInfo propertyInfo = control.Tag as PropertyInfo;
                    if (propertyInfo == null)
                    {
                        continue;
                    }

                    if (propertyInfo.PropertyType.Name.ToLower() != "string")
                    {
                        continue;
                    }

                    string val        = (string)propertyInfo.GetValue(_typeToImport, null);
                    string controlVal = ((RichTextBox)control).Rtf;
                    if (val != controlVal)
                    {
                        propertyInfo.SetValue(_typeToImport, controlVal, null);
                    }
                }
                if (control is NumericUpDown)
                {
                    PropertyInfo propertyInfo = control.Tag as PropertyInfo;
                    if (propertyInfo == null)
                    {
                        continue;
                    }

                    string typeName = propertyInfo.PropertyType.Name.ToLower();
                    switch (typeName)
                    {
                    case "int32":
                    {
                        int val        = (int)propertyInfo.GetValue(_typeToImport, null);
                        int controlVal = (int)((NumericUpDown)control).Value;
                        if (val != controlVal)
                        {
                            propertyInfo.SetValue(_typeToImport, controlVal, null);
                        }

                        break;
                    }

                    case "int16":
                    {
                        Int16 val        = (Int16)propertyInfo.GetValue(_typeToImport, null);
                        Int16 controlVal = (Int16)((NumericUpDown)control).Value;
                        if (val != controlVal)
                        {
                            propertyInfo.SetValue(_typeToImport, controlVal, null);
                        }

                        break;
                    }

                    case "double":
                    {
                        double val        = (double)propertyInfo.GetValue(_typeToImport, null);
                        double controlVal = (double)((NumericUpDown)control).Value;
                        if (val != controlVal)
                        {
                            propertyInfo.SetValue(_typeToImport, controlVal, null);
                        }

                        break;
                    }
                    }
                }
                if (control is DateTimePicker)
                {
                    PropertyInfo propertyInfo = control.Tag as PropertyInfo;
                    if (propertyInfo == null)
                    {
                        continue;
                    }

                    string typeName = propertyInfo.PropertyType.Name.ToLower();
                    switch (typeName)
                    {
                    case "datetime":
                    {
                        DateTime val        = (DateTime)propertyInfo.GetValue(_typeToImport, null);
                        DateTime controlVal = ((DateTimePicker)control).Value;
                        if (val != controlVal)
                        {
                            propertyInfo.SetValue(_typeToImport, controlVal, null);
                        }
                        break;
                    }

                    case "timespan":
                    {
                        TimeSpan val        = (TimeSpan)propertyInfo.GetValue(_typeToImport, null);
                        TimeSpan controlVal = ((DateTimePicker)control).Value.TimeOfDay;
                        if (val != controlVal)
                        {
                            propertyInfo.SetValue(_typeToImport, controlVal, null);
                        }
                        break;
                    }

                    default:
                        break;
                    }
                }
                if (control is CheckBox)
                {
                    PropertyInfo propertyInfo = control.Tag as PropertyInfo;
                    if (propertyInfo == null)
                    {
                        continue;
                    }

                    bool val        = (bool)propertyInfo.GetValue(_typeToImport, null);
                    bool controlVal = ((CheckBox)control).Checked;
                    if (val != controlVal)
                    {
                        propertyInfo.SetValue(_typeToImport, controlVal, null);
                    }
                }
                if (control is AttachedFileControl)
                {
                    PropertyInfo propertyInfo = control.Tag as PropertyInfo;
                    if (propertyInfo == null)
                    {
                        continue;
                    }

                    AttachedFileControl fileControl = ((AttachedFileControl)control);
                    AttachedFile        val         = (AttachedFile)propertyInfo.GetValue(_typeToImport, null);
                    AttachedFile        controlVal  = fileControl.AttachedFile;

                    fileControl.ApplyChanges();

                    if (val != controlVal)
                    {
                        propertyInfo.SetValue(_typeToImport, controlVal, null);
                    }
                }
                if (control is LifelengthViewer)
                {
                    PropertyInfo propertyInfo = control.Tag as PropertyInfo;
                    if (propertyInfo == null)
                    {
                        continue;
                    }

                    Lifelength val        = (Lifelength)propertyInfo.GetValue(_typeToImport, null);
                    Lifelength controlVal = ((LifelengthViewer)control).Lifelength;
                    if (!val.IsEqual(controlVal))
                    {
                        propertyInfo.SetValue(_typeToImport, controlVal, null);
                    }
                }
                if (control is ThresholdControl)
                {
                    PropertyInfo propertyInfo = control.Tag as PropertyInfo;
                    if (propertyInfo == null)
                    {
                        continue;
                    }

                    object val        = propertyInfo.GetValue(_typeToImport, null);
                    object controlVal = ((ThresholdControl)control).Threshold;
                    if (val.ToString() != controlVal.ToString())
                    {
                        propertyInfo.SetValue(_typeToImport, controlVal, null);
                    }
                }
                if (control is DictionaryComboBox)
                {
                    PropertyInfo propertyInfo = control.Tag as PropertyInfo;
                    if (propertyInfo == null)
                    {
                        continue;
                    }

                    object val        = propertyInfo.GetValue(_typeToImport, null);
                    object controlVal = ((DictionaryComboBox)control).SelectedItem;
                    if (val == null || controlVal == null || !val.Equals(controlVal))
                    {
                        propertyInfo.SetValue(_typeToImport, controlVal, null);
                    }
                }
                if (control is ComboBox)
                {
                    PropertyInfo propertyInfo = control.Tag as PropertyInfo;
                    if (propertyInfo == null)
                    {
                        continue;
                    }

                    object val        = propertyInfo.GetValue(_typeToImport, null);
                    object controlVal = ((ComboBox)control).SelectedItem;
                    if (val == null || controlVal == null || !val.Equals(controlVal))
                    {
                        propertyInfo.SetValue(_typeToImport, controlVal, null);
                    }
                }
            }
        }