private Dictionary <Type, IFactory> Factory = new Dictionary <Type, IFactory>(); //Массив обработчиков //===В случае если открыли форму для редактирования объекта=== public Edit(string name, dynamic myObj) {//Если передали объект на редактирование InitializeComponent(); NewObj = myObj; InputFactory(); //регистрация обработчиков OutElement(name); //Выводим свойства+ //Задваем размер окна: Height = PointY.getY() + 75; //Высота Width = 300; //Ширина }
private void OutProperty() { //Вывод свойств Element = new Dictionary <object, ObjElement>(); var map = (IDictionary <String, Object>)NewObj; //Словарь свойств foreach (var property in map) { if (property.Value != null && Factory.ContainsKey(property.Value.GetType())) { //Вывод свойства Label myLabel = LabelControl(property.Key.ToString()); Control PropertyControl = Factory[property.Value.GetType()].ReturnControl(); //Элемент связанный с чекбокс и контейнер для свойства ComboBox TypeBox = TypeControl(); //Инииализация бокса типа объекта TypeBox.SelectedItem = property.Value.GetType().Name; //Вывод названия типа данных ControlAdd(PropertyControl, property.Value.ToString(), new Point(80, PointY.getYplus())); //Вывод контейнера свойства ControlAdd(myLabel, null, new Point(30, PointY.getY() + 3)); //Вывод лейбла названия свойства ControlAdd(TypeBox, null, new Point(190, PointY.getY())); //Вывод комбобокса типов Element.Add(TypeBox, new ObjElement(myLabel, PropertyControl)); //Добавление в словарь свойства } } }
//================================= private void BAdd(object sender, EventArgs e) { //Жобавление нового свойства объекту Add frm = new Add(); //Открытие формы на добавление объекта if (frm.Enabled != false) { frm.ShowDialog(); } //==Добавление свойства if (frm.NewProperty == null || ((IDictionary <string, Object>)NewObj).ContainsKey(frm.NewProperty.myName)) {//Есть ли данное свойство MessageBox.Show("Такое свойство уже имеется или оно равно null!"); return; } try { //Добавление свойства var currFactory = Factory.Where(x => x.Key.Name == frm.NewProperty.myType).FirstOrDefault(); //выбираем обработчик object value = currFactory.Value.ReturnValue(frm.NewProperty.myValue); //выводим объект определенного типа ((IDictionary <string, Object>)NewObj).Add(frm.NewProperty.myName, value); //Добавление свойства в наш объект MessageBox.Show("Добавлнно новое совйство " + frm.NewProperty.myName); } catch {//В случае непредусмотренной ошибки Console.WriteLine("Возникло исключение!\n Свойсто не добавлено"); return; } foreach (var cur in Element) {//Очистка элеменотов свойств Controls.Remove((Control)cur.Key); Controls.Remove(cur.Value.myLabelObject); Controls.Remove(cur.Value.myControl); } PointY.dropY(); //обнуление занчения оси икс OutProperty(); //И занеого отображаем на форме элементы свойств Height = PointY.getY() + 75; //Высота формы }