1. C# / Говнокод #19476

    −95

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    public void CopyToListControl(ListControl ListControlElement, List<string> v)
            {
                if (ListControlElement is ComboBox)
                {
                    ((ComboBox)ListControlElement).Items.Clear();
                    for (int i = 0; i < v.Count; i++) ((ComboBox)ListControlElement).Items.Add(v);
                }
                if (ListControlElement is ListBox)
                {
                    ((ListBox)ListControlElement).Items.Clear();
                    for (int i = 0; i < v.Count; i++) ((ListBox)ListControlElement).Items.Add(v);
                }
                if (ListControlElement is CheckedListBox)
                {
                    ((CheckedListBox)ListControlElement).Items.Clear();
                    for (int i = 0; i < v.Count; i++) ((CheckedListBox)ListControlElement).Items.Add(v);
                }
            }

    Функция нового класса для подключения к форме. На форме может быть любой из 3 списочных элементов. Подводим к общему классу ListControl
    Но так писать нельзя:
    public void CopyToListControl(ListControl ListControlElement, List<string> v)
    {
    ListControlElement.Items.Clear();
    for (int i = 0; i < v.Count; i++) ListControlElement.Items.Add(v);
    }

    а дальше в коде будет несколько методов по тому же принципу, по 3 if в каждой функции (бла-бла-бла is бла-бла-бла)
    + ещё приведение типа каждый раз

    Запостил: sbs, 16 Февраля 2016

    Комментарии (9) RSS

    • var items = ListControlElement.GetType().GetProperty("Items").GetValue(ListControlElement);
      items.Clear();

      А еще у вас добавление элементов ВИЧ-положительно
      Ответить
      • ой! До GetValue понятно, а дальше в голове так ппшшшшшшшшшшшшш
        Ответить
    • А можно как в похапе
      ((dynamic)ListControlElement).Items.Clea r();
      Ответить
      • Работает, правда, в FW 4.0+. В 3.5 уже нельзя.
        А так же при using Microsoft.CSharp
        Спасибо!
        Ответить
    • Адаптер?
      Ответить
      • Слишком мудрено. Рефлексия рулит.

        Вообще какая-то ебота с архитектурой windows form
        Ответить
    • а почему не ListControlElement.DataSource = v?
      Ответить

    Добавить комментарий