/// <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); } } } }