Advertisement
Guest User

MainForm

a guest
Feb 25th, 2020
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.08 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Windows.Forms;
  6.  
  7. namespace OOP_UI
  8. {
  9.     public partial class fMain : Form
  10.     {
  11.         //список создаваемой косметики
  12.         public List<Cosmetics> CosmeticsList = new List<Cosmetics>()
  13.         {
  14.             new Mascara() { Name = "«Black Ecstasy»", AmountOfItems = 50, Price = 20,
  15.                             Saturation = EyeProducts.Variants.Middle, LongLasting = EyeProducts.Variants.Middle,
  16.                             Antiallergic = false, WaterProof = true, Volumizer = false, Extension = false
  17.                           },
  18.             new EyeShadows() { Name = "«Eyes to Kill»", AmountOfItems = 100, Price = 20,
  19.                                Saturation = EyeProducts.Variants.Middle, LongLasting = EyeProducts.Variants.Middle,
  20.                                Consistency = "undefined", Transparent = EyeShadows.Transparency.Middle, Glitter = false, Matte = false
  21.                              },
  22.             new Powder() { Name = "«Universelle Libre»", AmountOfItems = 65, Price = 20,
  23.                            Consistency = "undefined", Matte = true, Luminous = false, Transparent = Powder.Transparency.Middle
  24.                          },
  25.             new Concealer() { Name = "«MAC Pro Longwear»", AmountOfItems = 70, Price = 20,
  26.                               Consistency = "undefined", Matte = true,
  27.                               Density = Concealer.Variants.Middle, LongLasting = Concealer.Variants.Middle, Moisturizing = false, MaskingEffect = false
  28.                             },
  29.             new LipPencil() { Name = "«Maybelline»", AmountOfItems = 65, Price = 20,
  30.                               LongLasting = LipProducts.Variants.Middle, Transparent = LipProducts.Variants.Middle,
  31.                               IsAutomatic = false, Soft = LipPencil.Softness.Medium
  32.                             },
  33.  
  34.            new Tint() { Name = "«Relouis»", AmountOfItems = 65, Price = 20,
  35.                         LongLasting = LipProducts.Variants.Middle, Transparent = LipProducts.Variants.Middle,
  36.                         Taste = "undefined", Brightness = Tint.BrightnessVar.Medium,
  37.                       },
  38.  
  39.             new Lipstick() { Name = "«NYX»", AmountOfItems = 65, Price = 20,
  40.                              LongLasting = LipProducts.Variants.Middle, Transparent = LipProducts.Variants.Middle,
  41.                              Density = Lipstick.Variants.Middle, HasTint = null, IsPlump = false, Shimmering = false,
  42.                            },
  43.         };
  44.  
  45.         //список типов каждого средства
  46.         public List<Type> TypesList = new List<Type>()
  47.         {
  48.             typeof(Mascara),
  49.             typeof(EyeShadows),
  50.             typeof(Powder),
  51.             typeof(Concealer),
  52.             typeof(LipPencil),
  53.             typeof(Tint),
  54.             typeof(Lipstick)
  55.         };
  56.  
  57.         public int SelectedIndex;
  58.  
  59.         public fMain()
  60.         {
  61.             InitializeComponent();
  62.         }
  63.  
  64.         //загрузка формы
  65.         private void FMain_Load(object sender, EventArgs e)
  66.         {
  67.             lvMainForm.MultiSelect = false;
  68.             SelectedIndex = -1;
  69.  
  70.             foreach (var type in TypesList)
  71.                 cbTypes.Items.Add(type.ToString().Substring(7));
  72.  
  73.             cbTypes.SelectedIndex = 0;
  74.             cbTypes.DropDownStyle = ComboBoxStyle.DropDownList;
  75.  
  76.             Redraw(lvMainForm, CosmeticsList);
  77.         }
  78.  
  79.         //перерисовка списка
  80.         public void Redraw(ListView listView, List<Cosmetics> items)
  81.         {
  82.             listView.Clear();
  83.  
  84.             for (int i = 0; i < items.Count; i++)
  85.             {
  86.                 var LVItem = new ListViewItem();
  87.                 Type itemType = items[i].GetType();
  88.  
  89.                 object Name;
  90.  
  91.                 try
  92.                 {
  93.                     var nameField = items[i].GetType().GetField("Name");
  94.                     Name = nameField.GetValue(items[i]);
  95.                 }
  96.                 catch
  97.                 {
  98.                     Name = "";
  99.                 }
  100.  
  101.                 LVItem.Text = itemType.Name + " " + Name;
  102.                 listView.Items.Add(LVItem);
  103.             }
  104.         }
  105.  
  106.         //создание нового средства
  107.         private void butCreate_Click(object sender, EventArgs e)
  108.         {
  109.             Cosmetics newObject = (Cosmetics) Activator.CreateInstance(TypesList[cbTypes.SelectedIndex]);
  110.             CosmeticsList.Add(newObject);
  111.  
  112.             Form EForm = new ItemForm(newObject, CosmeticsList);
  113.             EForm.StartPosition = FormStartPosition.CenterScreen;
  114.             EForm.ShowDialog();
  115.             EForm.Dispose();
  116.  
  117.             Redraw(lvMainForm, CosmeticsList);
  118.         }
  119.  
  120.         //редактирование выбранного средства
  121.         private void butEdit_Click(object sender, EventArgs e)
  122.         {
  123.             //получаем индекc выделенного пункта
  124.             int itemNum;
  125.             if (lvMainForm.SelectedIndices.Count != 0)
  126.                 itemNum = lvMainForm.SelectedIndices[0];
  127.             else
  128.                 return;
  129.             //Создаем форму редактирования обьекта
  130.             Form EForm = new ItemForm(CosmeticsList[itemNum], CosmeticsList);
  131.             EForm.StartPosition = FormStartPosition.CenterScreen;
  132.             EForm.ShowDialog();
  133.             EForm.Dispose();
  134.  
  135.             Redraw(lvMainForm, CosmeticsList);
  136.         }
  137.  
  138.         private void Delete_Action(Cosmetics DelObject, List<Cosmetics> ObjectList)
  139.         {
  140.             //список объектов которые могут использовать удаляемый обьект
  141.             var ownerList = ObjectList.Where(item => (item.GetType().GetFields().Where(field => (field.FieldType == DelObject.GetType()))).ToList().Count > 0);
  142.             foreach (var owner in ownerList)
  143.             {
  144.                 foreach (var field in owner.GetType().GetFields().Where(field => (field.FieldType == DelObject.GetType())).ToList())
  145.                 {
  146.                     if (field.GetValue(owner) != null)
  147.                     {
  148.                         if (field.GetValue(owner).Equals(DelObject))
  149.                         {
  150.                             field.SetValue(owner, null);
  151.                         }
  152.                     }
  153.                 }
  154.             }
  155.             //Непосредственное удаление обьекта
  156.             ObjectList.Remove(DelObject);
  157.         }
  158.         //удаление выбранного средства
  159.         private void butDelete_Click(object sender, EventArgs e)
  160.         {
  161.             if ((lvMainForm.SelectedIndices.Count != 0) && (lvMainForm.SelectedIndices[0] < CosmeticsList.Count))
  162.             {
  163.                 int itemNum = lvMainForm.SelectedIndices[0];
  164.  
  165.                 Delete_Action(CosmeticsList[itemNum], CosmeticsList);
  166.             }
  167.             Redraw(lvMainForm, CosmeticsList);
  168.         }      
  169.     }
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement